【问题标题】:How to use dialog boxes using Glade in python running, destroying, and reusing如何在 python 运行、销毁和重用中使用 Glade 使用对话框
【发布时间】:2012-11-26 22:12:59
【问题描述】:

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

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

Glade 在其中放了一把活动扳手。调用 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 库重新实例化一个对话框,而不是进行所有这些显示和隐藏?

谢谢,

纳尼

【问题讨论】:

    标签: python dialog gtk builder glade


    【解决方案1】:

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

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

    【讨论】:

    • 好的。我很高兴您对它是否是黑客的看法。我考虑过再次加载它,但它不会再次自动与父窗口关联,另外,它是否与加载整个其他构建器对象加载到主窗口中的问题相同,关于窗口,以及另一个其他对话框窗口?如果我真的想这样做并使用 Gtk.Dialog.set_parent 方法并在需要时重新加载每个窗口的实例,那么我可能应该将各个窗口分离为不同的空地文件,这样我就可以销毁它。 Thots?
    • 是的,您必须将窗口分离到单独的 Glade 文件中。但我真的不会去那么麻烦;对于最终用户来说,窗口是被破坏还是隐藏并不重要,不是吗?只有当您有内存不足的危险时,它才会有所作为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多