Я создал приложение 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()