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.