Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Python: taustalle funktio

OILgame [15.08.2009 02:50:02]

#

Miten saisin ajettua vaikka funktion taustalla?

trilog [15.08.2009 10:19:18]

#

http://docs.python.org/library/threading.html

Kray [15.08.2009 10:26:14]

#

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.

OILgame [21.08.2009 20:58:43]

#

Kiitti, sain ton toimimaan erillisessä py-filussa. Kun lisään sen py-filuun mihin olen alkanut tekemään ulkoasua se ei tee mitään :(

Lataa ohjelma

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()

OILgame [24.08.2009 17:46:20]

#

Kokeilin laittaa tuon GTK:nkin samalla tavalla instanssiksi, mutta toimii samalla tavalla, eli ihan kun koko hae_ilmoitukset luokkaa ei olisi olemassa :(

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta