如何在python中使用Glade运行、销毁和重用对话框

如何在python中使用Glade运行、销毁和重用对话框,python,dialog,gtk,builder,glade,Python,Dialog,Gtk,Builder,Glade,我正在使用Glade编写一个带有对话框的python GUI 如果我没有使用Glade,我会使用一个类来创建一个对话框窗口(dialag),运行它(dialog.run),做任何事情,然后删除它(dialog.destroy)。然后,当我再次需要对话框时,我会重新实例化它 格莱德在这里面放了一把活动扳手。调用Gtk.Builder后,我可以通过以下方式获取对象: dialog = builder.get_object("dialog") response = dialog.run() #do s

我正在使用Glade编写一个带有对话框的python GUI

如果我没有使用Glade,我会使用一个类来创建一个对话框窗口(dialag),运行它(dialog.run),做任何事情,然后删除它(dialog.destroy)。然后,当我再次需要对话框时,我会重新实例化它

格莱德在这里面放了一把活动扳手。调用Gtk.Builder后,我可以通过以下方式获取对象:

dialog = builder.get_object("dialog")
response = dialog.run()
#do stuff
dialog.destroy()
我更喜欢运行、使用、销毁的工作方式,因为它会将其从内存中删除

然而,使用Glade,在我完成上述操作后,我无法让它再次工作,因为调用已被破坏,我不知道如何让Glade重新实例化它

在我以前编写的程序中,我做过如下工作:

dialog = builder.get_object('dialog')
response = dialog.run()
# use it
dialog.hide()
当我再次需要它时,我会:

dialog.show()
response = dialog.run()
# do stuff
dialog.hide()
为了绕过这个限制,但我对这种方式并不满意,因为我觉得它有点像黑客(我猜在Glade中,一切都是在开始时创建的)。有没有办法让gladelibs重新实例化一个对话框,而不是执行所有这些显示和隐藏操作

谢谢


Narnie

是-您必须创建一个新的
builder
对象,然后重新加载Glade文件。一个
builder
对象创建一个对话框,如果您破坏了它,它就消失了


我不一定认为隐藏和显示对话框是一种黑客行为。如果内存是一个严重的问题,您可能会想要销毁和重新创建,但除此之外,我不认为这有多大区别。

好的。我很高兴听到你对它是否是黑客的看法。我曾考虑过再次加载它,但这样它就不会再次自动与父窗口关联,而且,这不仅仅是加载整个其他生成器对象(加载主窗口、关于窗口和其他对话框窗口)的问题吗?如果我真的想这样做,也许我应该把各个窗口作为不同的glade文件分开,然后使用Gtk.Dialog.set_parent方法,在需要时重新加载每个窗口的实例,这样我就可以销毁它。Thots?是的,你必须把窗户分成单独的林间空地。但我真的不会那么麻烦;对于最终用户来说,窗口是否被破坏或隐藏并不重要,是吗?只有当你有内存不足的危险时,它才会起作用。