Miten saisin ajettua vaikka funktion taustalla?
Oletan että haluat tehdä useampaa asiaa yhtäaikaa. Tähän soveltuvat säikeet. Pythonissa säie on luokasta Thread periytetty luokka, josta luodaan instanssi.
#importoidaan säieluokka
from threading import Thread
#sleep-funktio
import time
#luokka joka periytetään luokasta Thread
class MyThread(Thread):
def __init__(self):
#Alustetaan säie
Thread.__init__(self)
def run(self):
#printataan loopissa sekunnin välein kymmenen kertaa
for luku in range(10):
print("Säie "+str(luku))
time.sleep(1)
#luodaan instanssi luokasta
mythread=MyThread()
#käynnistetään säie
mythread.start()
#Printataan loopissa sekunnin välein kymmenen kertaa
for luku in range(10):
print("Pääohjelma "+str(luku))
time.sleep(1)Tästä voit todeta, että säiettä ja pääohjelmaa suoritetaan yhtäaikaisesti.
EDIT: Örph, trilog ehti ensin.
Kiitti, sain ton toimimaan erillisessä py-filussa. Kun lisään sen py-filuun mihin olen alkanut tekemään ulkoasua se ei tee mitään :(
Tässä py-tiedoston lähdekoodi:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Kirjastot
###########################################################################
import sys
import pynotify
import urllib
import time
from threading import Thread
try:
import pygtk
pygtk.require("2.0")
except:
pass
try:
import gtk
import gtk.glade
except:
sys.exit(1)
#Luokat
###########################################################################
#Avaataan uusi ikkuna
class uusi_ikkuna:
def __init__(self, name):
self.hwg = self.avaa_ikkuna(name)
gtk.main()
def avaa_ikkuna(self, name):
glade_tiedosto = name+".glade"
self.wTree = gtk.glade.XML(glade_tiedosto)
dic = { }
self.wTree.signal_autoconnect(dic)
#Tehdään trayn rightclikin valikko
class uusi_tray_valikko:
def __init__(self, data, event_button, event_time):
self.tulosta_valikko(event_button, event_time)
def tulosta_valikko(self, event_button, event_time, data=None):
#Luodaan valikko
valikko = gtk.Menu()
#Tehdään painikkeet
painike = {}
painike['hallitse'] = gtk.MenuItem("Hallitse")
painike['kirjaudu'] = gtk.MenuItem("Kirjaudu")
painike['sammuta'] = gtk.MenuItem("Sammuta")
#Lisäätään valikkoon painikkeet
valikko.append(painike['hallitse'])
valikko.append(painike['kirjaudu'])
valikko.append(painike['sammuta'])
#Lisätään signaalit
painike['hallitse'].connect_object("activate", uusi_ikkuna, "uusi_ilmoitus")
painike['kirjaudu'].connect_object("activate", uusi_ikkuna, "kirjaudu")
painike['sammuta'].connect_object("activate", self.sammuta, "")
#Näytetään painikkeet
painike['hallitse'].show()
painike['kirjaudu'].show()
painike['sammuta'].show()
valikko.popup(None, None, None, event_button, event_time)
def sammuta(self, empty):
sys.exit(0)
#Haetaan ilmoitettaavaa palvelimelta
class hae_ilmoitukset(Thread):
#Alustetaan säie
def __init__(self):
Thread.__init__(self)
#Looppi joka katsoo 10s välein onko ilmoitettavaa
def run(self):
teksti = self.hae_viesti()
if len(teksti) > 0:
self.ilmoitus(teksti)
print "haettiin"
time.sleep(10)
self.run()
#Haetaan sivu
def hae_viesti(self):
opener = urllib.FancyURLopener({})
f = opener.open("http://laasonen.net/alert/lue.php")
lahdekoodi = f.read()
return lahdekoodi
#Tulostetaan ilmoitus
def ilmoitus(self, teksti):
teksti = teksti.split("|")
pynotify.init(" ")
n = pynotify.Notification("Ilmoitus "+teksti[0], teksti[1])
n.show()
#Koodi
###########################################################################
if __name__ == "__main__":
#Luodaan tray
icon = gtk.status_icon_new_from_icon_name("tomboy-note")
icon.connect('popup-menu', uusi_tray_valikko)
gtk.main()
#Aloitetaan säie ilmoitusten hakuun
hae_ilmoituksia=hae_ilmoitukset()
hae_ilmoituksia.start()Kokeilin laittaa tuon GTK:nkin samalla tavalla instanssiksi, mutta toimii samalla tavalla, eli ihan kun koko hae_ilmoitukset luokkaa ei olisi olemassa :(
Aihe on jo aika vanha, joten et voi enää vastata siihen.