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

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

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
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

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
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

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,.
TimeMen
User
Beiträge: 55
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

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
Eine Signatur ist ein Text, der an deine Nachrichten angefügt werden kann. Sie ist auf 300 Zeichen begrenzt.
Antworten