Vereinfachter code:
Code: Alles auswählen
import gtk
import threading
class MainWindow(object):
'''
Fenster mit button, welcher einen Thread startet
'''
def __init__(self):
gtk.gdk.threads_init()
window = gtk.Window(gtk.WINDOW_TOPLEVEL)
window.set_position(gtk.WIN_POS_CENTER)
window.set_title("Hauptfenster")
window.connect("delete_event", gtk.main_quit)
button = gtk.Button("Start timer")
button.connect("clicked", self.buttonEvent)
buttonBox = gtk.HButtonBox()
buttonBox.add(button)
window.add(buttonBox)
window.show_all()
def startGtk(self):
gtk.main()
def buttonEvent(self, widget, *args):
'''
Startet Timer, welcher nach Ablauf von 2 Sek. den callback ausfuehrt
'''
print "Starte Timer und warte 2 Sekunden"
timer = threading.Timer(2, self.callback)
timer.start()
def callback(self, *args):
'''
Startet den Dialog, friert jedoch ein
'''
dialog = MyDialog()
ret = dialog.runMyDialog()
print ret
class MyDialog():
'''
Klasse in der ein Dialog generiert und gestartet wird
'''
def runMyDialog(self):
dialog = gtk.Dialog("My dialog", None,
gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT, #binary flags or'ed together
(gtk.STOCK_YES, gtk.RESPONSE_YES, gtk.STOCK_NO, gtk.RESPONSE_NO))
hbox = gtk.HBox(False, 0)
hbox.set_border_width(10)
hbox.pack_start(gtk.Label("It works"))
dialog.vbox.pack_start(hbox)
dialog.vbox.set_border_width(10)
dialog.show_all()
response = dialog.run()
dialog.destroy()
return response
if __name__ == "__main__":
programm = MainWindow()
gtk.gdk.threads_enter()
programm.startGtk()
gtk.gdk.threads_leave()
EDIT: Benutze python 2.7