我正在使用 Python / Glade 开发 GUI 应用程序,并遇到以下问题。我正在尝试使 About 对话框正常工作...但是,当我单击“关闭”(在“关于”对话框中)然后尝试再次打开它时,我看到的就是:
因此,只是窗口的一小部分,以及一个不起作用的关闭按钮。这是我的 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 帖子,该帖子突出显示了本教程(谁说要使用run()/destroy()
),并且看到了这种行为。
首先,关闭按钮什么都不做。出于某种原因,我曾认为它的行为是预先定义的。其次,使用角关闭按钮关闭对话框仍然提供与我在上面看到的相同的行为run()/destroy()
。
编辑2:通过添加以下内容解决:
dAbout.connect("response", lambda d, r: d.hide())