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?