我正在用Python/Glade开发一个GUI应用程序,有以下问题。 我正在尝试使“关于”对话框正常工作…但是,当我单击“关闭”(在“关于”对话框中)然后再次尝试打开它时,我只看到:
{1美元^
所以,只是窗口的一小部分,还有一个不起作用的关闭按钮。 这是我为我的空地之窗上课:
# 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()
在我的主要职能是:
^{pr2}$在第二次单击时,我在终端窗口中看到以下输出(使用macosx)。在
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()
对话框。在你甚至可以使用run()。你不应该使用destroy()。是什么让您认为不应该同时使用run()和hide()呢?看,当你销毁一个小部件时,这意味着要把它从内存中删除,就好像它从未被构建过一样。如果隐藏它,以后可以重用它,但要注意用户可能对它所做的更改,因为窗口将以隐藏前的状态重新显示。您可以在隐藏时从代码中操作小部件属性。在
关闭按钮的“预定义”操作是由run()引起的。使用lambda函数发布的解决方案只不过是run()为您做的事情。基本上它可以做到以下几点:
您只需在之后隐藏()它,然后就可以再次运行()它。在
相关问题 更多 >
编程相关推荐