Отражение - получить имя свойства [дубликат]

Я создал приложение PyGTK, которое показывает диалог, когда пользователь нажимает кнопку. Диалог загружается в мой метод __ init __ с помощью:

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

В обработчике событий диалог отображается с помощью команды self.myDialog.run () , но это работает только один раз. , потому что после run () диалог автоматически уничтожается. Если я нажму кнопку второй раз, приложение выйдет из строя.

Я прочитал, что есть способ использовать show () вместо run () , где диалоговое окно не отображается уничтожен, но мне кажется, что это неправильный способ для меня, потому что я хотел бы, чтобы диалог вел себя модально и возвращал управление коду только после того, как пользователь его закрыл.

Есть ли простой способ многократно показывать диалоговое окно с использованием метода run () с использованием gtkbuilder? Я попытался перезагрузить весь диалог с помощью gtkbuilder, но это, похоже, не сработало,


[РЕШЕНИЕ] (отредактировано)
Как указано в ответе ниже, использование hide () делает свое дело. Сначала я подумал, что вам все еще нужно отловить «событие удаления», но на самом деле это не обязательно. Простой пример, который работает:


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()
9
задан Julian 13 January 2011 в 14:55
поделиться