auf Button-druck soll sich das Hintergrundfenster für eine 1 Sekunde rot färben und dann wieder die vorherige Farbe annehmen.
Tatsächlich wartet das Programm aber erst eine Sekunde und färbt dann rot & setzt sofort wieder auf die vorherige Farbe. Dass der Farbwechsel stattfindet, sieht man, wenn die Zeile mit self.win.set_style(save_style) auskommentiert wird.
Der Befehl self.win.queue_draw() reicht offenbar nicht aus, um das Rot-Färben des Fensters vor dem sleep()-Befehl zu erzwingen. Wie kann ich hier vorgehen?
Code: Alles auswählen
import pygtk
pygtk.require ("2.0")
import gtk
from time import sleep
class Test:
def __init__(self):
self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.win.connect("destroy", lambda w: gtk.main_quit())
self.win.set_default_size(500,400)
vbox = gtk.VBox(False, 0)
self.win.add(vbox)
label = gtk.Label(u"Drücke Button für rotes Fenster!")
vbox.pack_start(label,True,True,20)
button = gtk.Button("Werde Rot!")
button.connect("clicked",self.on_button_clicked)
vbox.pack_start(button,False,False,20)
self.win.show_all()
def on_button_clicked(self, widget):
save_style = self.win.get_style()
color_red = self.win.get_colormap().alloc_color("red")
self.win.modify_bg(gtk.STATE_NORMAL,color_red)
self.win.queue_draw()
sleep(1.0)
# nächste Zeile auskommentieren und den Wechsel auf Rot zu sehen
self.win.set_style(save_style)
#----------------------------------------------------------------
if __name__ == '__main__':
Test()
gtk.main()