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

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

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

Beitragvon TimeMen » Donnerstag 30. November 2017, 17:56

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.

  1. if not psk:
  2.             dialog = Gtk.MessageDialog(self, 0, Gtk.MessageType.WARNING, Gtk.ButtonsType.OK_CANCEL, "!!! WARNING !!!")
  3.             dialog.format_secondary_text("Please type in your wifi's PSK...")
  4.             response = dialog.run()
  5.             if response == Gtk.ResponseType.OK:
  6.                 dialog.destroy()
  7.             else:
  8.                 dialog.destroy()
  9. 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
Wie poste ich richtig?
Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du zwei bis fünf neue Themen in den falschen Unterforen mit kreativen Titel und undeutlichen Text, unter dem sich jeder etwas anders vorstellen kann.
Benutzeravatar
__deets__
User
Beiträge: 1528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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

Beitragvon __deets__ » Donnerstag 30. November 2017, 18:02

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: 37
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

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

Beitragvon TimeMen » Donnerstag 30. November 2017, 18:12

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
Wie poste ich richtig?
Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du zwei bis fünf neue Themen in den falschen Unterforen mit kreativen Titel und undeutlichen Text, unter dem sich jeder etwas anders vorstellen kann.
Benutzeravatar
__deets__
User
Beiträge: 1528
Registriert: Mittwoch 14. Oktober 2015, 14:29

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

Beitragvon __deets__ » Donnerstag 30. November 2017, 18:25

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: 37
Registriert: Samstag 24. Dezember 2016, 10:25
Wohnort: Deutschland

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

Beitragvon TimeMen » Donnerstag 30. November 2017, 19:52

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
Wie poste ich richtig?
Nachdem du Google, die FAQ und die Suchfunktion erfolgreich ignoriert hast, erstellst du zwei bis fünf neue Themen in den falschen Unterforen mit kreativen Titel und undeutlichen Text, unter dem sich jeder etwas anders vorstellen kann.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder