Auf Dialog-Rückgabewert warten.

Programmierung für GNOME und GTK+, GUI-Erstellung mit Glade.
Antworten
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Hallo,

folgende Situation: Ich rufe in meinem Programm einen gtk.Dialog auf(nicht über einen Buttonklick, sprich z.B. einem `clicked' event, sondern direkt aus dem Programm heraus). In diesem Dialog soll etwas eingegeben werden, was ich dann zurückgeben und damit weiterarbeiten will. Allerdings läuft mein Programm heiter weiter, ohne zu warten.
Wie stell ich an das es warten?
LG Tobsl
Jan-Peer
User
Beiträge: 166
Registriert: Dienstag 2. Oktober 2007, 10:55

Moin,

ich denke, das was du suchst ist eine Form des modalen Dialogs mit einer eigenen Mainloop. Schau dir mal den Code im Link an, das sieht prinzipiell ganz vielversprechend aus, auch wenn ich es selber nicht getestet habe:

http://mail.python.org/pipermail/python ... 55995.html
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

CrackPod hat geschrieben:Allerdings läuft mein Programm heiter weiter, ohne zu warten.
Hallo CrackPod!

Das funktioniert mit der Methode ``run()`` des Dialogs. Damit wird gewartet bis vom Dialog zurück gekehrt wird.

http://www.pygtk.org/docs/pygtk/class-g ... ialog--run

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
CrackPod
User
Beiträge: 205
Registriert: Freitag 30. Juni 2006, 12:56

Wunderbar :) Genau das was ich gesucht habe. Dankeschön.
Noch eine kleine Frage, kann ich wenn ich response aufrufe, als response_id jeden beliebigen Wert nehmen, oder wird der durch einen generierten überschrieben?
Noch ne andere Frage: wie kann ich denn von einem Dialog etwas zurückgeben lassen? Also, wenn ich den ganzen Dialog in einer Funktion/Methode hab. Z.B.:

Code: Alles auswählen

return_val = popup_dialog()
Geht das so, oder muss ich mir was anderes einfallen lassen?
Edit:
Ich habs in der pygtk Demo gefunden :)
Pseudocode :roll:

Code: Alles auswählen

def popup_dialog():
  dialog = gtk.Dialog('Insert a value', None, 0, (gtk.STOCK_OK, gtk.RESPONSE_OK, gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL)
  entry = gtk.Entry()
  dialog.vbox.pack_start(entry)
  response = dialog.run()
  if response == gtk.RESPONSE_OK:
    return entry.get_text()
  dialog.destroy()
val = popup_dialog()
LG
Hi! I'm a .signature virus! copy me into your .signature file to help me spread!
Antworten