Seite 1 von 1

Gtk zeichnet erst nach Funktionsbearbeitung

Verfasst: Donnerstag 20. Februar 2014, 21:03
von Diego Brei
Ich will in einer Handlerfunktion das Aussehen eines Widgets verändern (im Beispiel ein Radiobutton). Wie es scheint, wartet Gtk mit der Darstellung der Veränderung, bis die Funktion abgearbeitet ist, sie soll jedoch unmittelbar dargestellt werden. (Das Beispiel hat wenig Sinn, ist nur zur Illustration)

Code: Alles auswählen

from gi.repository import Gtk
import time

class ToggleButtonWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="ToggleButton Demo")
        self.set_border_width(10)

        hbox = Gtk.Box(spacing=6)
        self.add(hbox)

        self.button1 = Gtk.RadioButton.new_with_label_from_widget(None, "Button 1")
        self.button1.connect("toggled", self.on_button_toggled)
        hbox.pack_start(self.button1, False, False, 0)

        self.button2 = Gtk.RadioButton.new_from_widget(self.button1)
        self.button2.set_label("Button 2")
        self.button2.connect("toggled", self.on_button_toggled)
        hbox.pack_start(self.button2, False, False, 0)

    def on_button_toggled(self, button):
        self.button2.set_active(True)
        time.sleep(2.0)

win = ToggleButtonWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
Zu Beginn der Funktion on_button_toggled() wird der zweite, nicht aktive Radiobutton aktiv gesetzt und anschließend 2 Sekunden gewartet. Angezeigt wird die Veränderung allerdings erst NACH den 2 Sekunden. Hat jemand ne Idee, wie man Gtk dazu bringen kann, die Änderung sofort umzusetzen?

Re: Gtk zeichnet erst nach Funktionsbearbeitung

Verfasst: Donnerstag 20. Februar 2014, 21:14
von EyDu
Diego Brei hat geschrieben:Hat jemand ne Idee, wie man Gtk dazu bringen kann, die Änderung sofort umzusetzen?
Die Änderung wird sofort durchgeführt. Jedoch blockiert die GUI, und damit auch die Aktualisierung aller Widgets, so lange, bis die Funktion abgearbeitet ist. So funktionnieren GUIs nun einmal. Wenn du das nicht möchtest, dann musst du deine Berechnung in einen Thread auslagern. Was ist denn dein eigentliches Problem?

Re: Gtk zeichnet erst nach Funktionsbearbeitung

Verfasst: Donnerstag 20. Februar 2014, 21:15
von diesch
Rufe nach der Veränderung

Code: Alles auswählen

while Gtk.events_pending():
      Gtk.main_iteration ()
auf.

Re: Gtk zeichnet erst nach Funktionsbearbeitung

Verfasst: Donnerstag 20. Februar 2014, 23:29
von Diego Brei
Super, funktioniert!
Vielen Dank