5

我正在使用 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()

为了绕过这个限制,但我对这种方式并不满意,感觉它有点像 hack(我猜对于 Glade,一切都是从一开始就创建的)。有没有办法让 Glade 库重新实例化一个对话框,而不是进行所有这些显示和隐藏?

谢谢,

纳尼

4

1 回答 1

2

是的——你必须创建一个新builder对象并重新加载 Glade 文件。一个builder对象创建一个对话框,如果你销毁它,它就消失了。

我不一定认为隐藏和显示对话框是一种技巧。如果内存是一个严重的问题,您可能想要破坏和重新创建,但否则我认为这不会有太大的不同。

于 2012-12-09T10:36:07.787 回答