[erledigt] Einfaches Beispiel mit Threads
Verfasst: Donnerstag 27. Juli 2006, 23:12
Hallo allerseits
Ich wollte mich heute mal an die Themen Threading und PyGTK heran wagen. Dazu entwickelte ich ein kleines Skript, welches ungefähr folgende Funktionalität haben soll;
- Ich starte das Skript
- Ein GUI mit zwei Buttons [Start ] [Stop] erscheint
- Der Benutzer klickt auf [Start], nun wird irgendwas auf die Konsole ausgegeben (wieder und immer wieder)
- sobald der Benutzer auf [Stop] klickt, sollen die Konsolenausgaben stoppen
Der Code dazu:
Wenn ich das Skript nun starte und auf [Start] klicke, passiert nichts. Schliesse ich das GUI jedoch, so beginnen plötzlich die Ausgaben.
Mein Verdacht; gtk.main() startet irgend einen Thread, der meinen ganzen Rest blockiert.
Hat jemand von euch eine Lösung zu meinem Problem?
Ich wollte mich heute mal an die Themen Threading und PyGTK heran wagen. Dazu entwickelte ich ein kleines Skript, welches ungefähr folgende Funktionalität haben soll;
- Ich starte das Skript
- Ein GUI mit zwei Buttons [Start ] [Stop] erscheint
- Der Benutzer klickt auf [Start], nun wird irgendwas auf die Konsole ausgegeben (wieder und immer wieder)
- sobald der Benutzer auf [Stop] klickt, sollen die Konsolenausgaben stoppen
Der Code dazu:
Code: Alles auswählen
import gtk
import pygtk
import threading
class Gui(threading.Thread):
def delete_event(self, widget, event, data = None):
gtk.main_quit()
return False
def start_work(self, widget, data = None):
print 'Klick auf Start'
self.worker = Worker()
self.worker.start()
def stop_work(self, widget, data = None):
print 'Klick auf Stop'
self.worker.interrupted = True
del self.worker
def __init__(self):
threading.Thread.__init__(self)
def run(self):
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.set_title('Multi-Threading')
self.box = gtk.HBox(False, 5)
self.window.add(self.box)
self.btnStart = gtk.Button("Start")
self.btnStart.connect("clicked", self.start_work)
self.box.pack_start(self.btnStart, True, True, 5)
self.btnStop = gtk.Button("Stop")
self.btnStop.connect("clicked", self.stop_work)
self.box.pack_start(self.btnStop, True, True, 5)
self.window.show_all()
self.window.connect("delete_event", self.delete_event)
self.window.show()
gtk.main()
class Worker(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
self.interrupted = False
def run(self):
while(self.interrupted == False):
print '... working ...'
else:
print '!!! STOP !!!'
if __name__ == '__main__':
gui = Gui()
gui.start()
Mein Verdacht; gtk.main() startet irgend einen Thread, der meinen ganzen Rest blockiert.
Hat jemand von euch eine Lösung zu meinem Problem?