我正在 Python/Glade 中开发 GUI 应用程序,并遇到以下问题。 我试图让“关于”对话框正常工作...但是,当我单击“关闭”(在“关于”对话框中)然后尝试再次打开它时,我看到的就是:
所以,只是窗口的一小部分,以及一个不起作用的关闭按钮。 这是我的 Glade 窗口的类:
# glade object
class MainWindow(object):
builder_ = None
# load main window
def __init__(self):
handler = {
"sigWindowDestroy" : gtk.main_quit,
"sigShowAbout" : self.show_about
}
projfile = "proj.glade"
self.builder_ = gtk.Builder()
self.builder_.add_from_file(projfile)
self.builder_.connect_signals(handler)
window = self.builder_.get_object("main_window")
window.show()
# show about dialog
def show_about(self, *args):
dAbout = self.builder_.get_object("dAbout")
dAbout.run()
dAbout.destroy()
在我的主要功能中:
# load glade gui
app = MainWindow()
gtk.main()
第二次单击时,我在终端窗口中看到以下输出(使用 Mac OS X)。
GtkWarning: gtk_widget_show: assertion `GTK_IS_WIDGET (widget)' failed
dAbout.run()
GtkWarning: gtk_label_set_markup: assertion `GTK_IS_LABEL (label)' failed
dAbout.run()
编辑:抱歉,由于对 PyGTK 不熟悉,必须重新打开。
我使用了 show()/hide()
方法,而不是建议的 run()/destroy()
方法。现在,我正在关注另一篇 SO 帖子,其中突出显示 this tutorial (谁说使用run()/destroy()
),并且我看到了这种行为。
首先,“关闭”按钮不执行任何操作。我曾以为出于某种原因它的行为是预先定义的。
其次,使用角关闭按钮关闭对话框仍然提供与上面的 run()/destroy()
相同的行为。
编辑 2:通过添加以下内容解决:
dAbout.connect("response", lambda d, r: d.hide())
最佳答案
不要尝试(深度)复制小部件。正如您所发现的,它不起作用。
相反,hide()
对话框而不是destroy()
它。
关于python - 被破坏的对话框无法正确重新出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12867116/