Wie zeigen immer wieder den Dialog mit PyGTK / Gtkbuilder?

Habe ich eine PyGTK-Anwendung, die zeigt, dass ein Dialog, wenn der Benutzer eine Taste drückt.
Der dialog geladen wird, in meinem __init__ Methode mit:

builder = gtk.Builder()
builder.add_from_file("filename")
builder.connect_signals(self) 
self.myDialog = builder.get_object("dialog_name")

In der event-handler, wird der dialog angezeigt, mit dem Befehl self.myDialog.run(), aber das funktioniert nur einmal, denn nach run() wird der dialog automatisch zerstört. Wenn ich auf die Taste ein zweites mal, stürzt die Anwendung ab.

Habe ich gelesen, dass es einen Weg gibt, zu verwenden show() statt run() wo der dialog wird nicht zerstört, aber ich glaube, das ist nicht der richtige Weg für mich ist, weil ich möchte, dass der dialog zu Verhalten, Modal und Rückgabe der Kontrolle an den code erst, nachdem es vom Benutzer geschlossen wurde.

Gibt es eine einfache Möglichkeit, um immer wieder einen dialog mit der run() Methode mit gtkbuilder? Ich habe versucht das Neuladen der ganze dialog mit dem gtkbuilder, aber das hat nicht wirklich zu funktionieren scheint, war der dialog fehlt, werden alle untergeordneten Elemente (und ich würde es vorziehen, verwenden Sie den generator nur einmal am Anfang des Programms).


[LÖSUNG] (bearbeitet)

Wie bereits durch die Antwort unter Verwendung hide() funktioniert der trick. Ich dachte zuerst, Sie musste noch fangen Sie die "delete-event", aber dies in der Tat nicht notwendig. Ein einfaches Beispiel, das funktioniert:


import pygtk
import gtk

class DialogTest:

    def rundialog(self, widget, data=None):
        self.dia.show_all()
        result = self.dia.run() 
        self.dia.hide()


    def destroy(self, widget, data=None):
        gtk.main_quit()

    def __init__(self):
        self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
        self.window.connect("destroy", self.destroy)

        self.dia = gtk.Dialog('TEST DIALOG', self.window, 
           gtk.DIALOG_MODAL  | gtk.DIALOG_DESTROY_WITH_PARENT)
        self.dia.vbox.pack_start(gtk.Label('This is just a Test'))


        self.button = gtk.Button("Run Dialog")    
        self.button.connect("clicked", self.rundialog, None)
        self.window.add(self.button)
        self.button.show()
        self.window.show()



if __name__ == "__main__":
    testApp = DialogTest()
    gtk.main()
InformationsquelleAutor Julian | 2011-01-11
Schreibe einen Kommentar