Seite 1 von 1

Gtk.MessageDialog schließt sich nicht und behindert Fortfahren des Programmes

Verfasst: Donnerstag 30. November 2017, 17:56
von TimeMen
Hallo ihr Lieben,

habe ein etwas älteres Projekt wieder ausgegraben um es endlich mal zu Ende zu bringen. Beim Test, ob das bisher geschriebene noch funktioniert, ist mir folgendes Problem aufgefallen.

Beim Druck auf einen Knopf wird ein Dialog ausgelöst. Wenn ich auf OK klicke, soll sich der Dialog beenden und der dahinter liegende Code ausführen. Leider schließt sich der Dialog erst, wenn der dahinterliegende Code bereits ausgeführt wurde. Dabei verdeckt der Dialog Ausgaben des ausgeführten Codes. Ist also nicht so geschickt, dass der Dialog nicht verschwindet.

Code: Alles auswählen

if not psk:
            dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, "!!! WARNING !!!")
            dialog.format_secondary_text("Please type in your wifi's PSK...")
            response = dialog.run()
            if response == Gtk.ResponseType.OK:
                dialog.destroy()
            else:
                dialog.destroy()
Code...
In diesem Teil wird der Dialog aufgerufen. Code... soll einfach die Zeilen die danach kommen ersetzen.
Wo liegt denn jetzt der Denkfehler, dass der Dialog sich erst nach Code... schließt?

Danke schonmal fürs Augen öffnen,
LG
TimeMen

Re: Gtk.MessageDialog schließt sich nicht und behindert Fortfahren des Programmes

Verfasst: Donnerstag 30. November 2017, 18:02
von __deets__
Dein Problem ist, das du immer noch in einer abarbeitung steckst, ohne das du die GTK Ereignisschleife wieder mal hast laufen lassen. Nur die raeumt naemlich dann deinen Dialog wirklich ab.

Wie man das in GTK genau macht, weiss ich nicht - aber so etwas wie "update" oder aehnliches koennte es geben. Google mal nach "run gtk mainloop", da kommt bestimmt was.

Und wenn dein Code danach etwas macht, das ebenfalls die GUI veraendern soll, dann wird der dasselbe Problem haben, und die Ergebnisse nicht sofort reflektieren. Auch da muss dann ein update her.

Re: Gtk.MessageDialog schließt sich nicht und behindert Fortfahren des Programmes

Verfasst: Donnerstag 30. November 2017, 18:12
von TimeMen
Hallo deets,
kannst du das mal irgendwie genauer beschreiben was du meinst, damit ich mir da auch ein Bild von machen kann?
Meinst du, dass das Programm geupdatet werden müsste um die Inhalte richtig anzuzeigen und sich richtig zu verhalten?

Da sollte es doch theoretisch aus dem Hause GTK schon eine Funktion geben die ich jetzt nur noch finden muss.un gtk mainloun gtk mainlo

LG
TimeMen

Re: Gtk.MessageDialog schließt sich nicht und behindert Fortfahren des Programmes

Verfasst: Donnerstag 30. November 2017, 18:25
von __deets__
GTK (und andere Toolkits) machen nicht sofort, was du ihnen sagst. Sondern sammeln das und machen das dann in einem Rutsch. Stell dir mal vor es waere anders: aufgrund von irgendetwas konfigurierst du an einem Label herum: text aendern, Font aendern, Farbe aendern. Drei Anweisungen. Wenn die sofort wirksam werden, hast du ein schoenes Geflacker.

Stattdessen macht GTK das erst, nachdem es die Kontrolle zurueck erlangt hat, und dann halt alles auf einmal. Und das musst du triggern. Wie gesagt, google mal nach gtk run mainloop, immediate update, so sachen halt,.

Re: Gtk.MessageDialog schließt sich nicht und behindert Fortfahren des Programmes

Verfasst: Donnerstag 30. November 2017, 19:52
von TimeMen
Hey,
danke, auch fürs Beispiel. Jetzt hab ich raus wie das gemeint ist.
Bin dank Infekt etwas langsam ^^

Werde mal schauen was sich so finden lässt dazu.

LG
TimeMen