我正在Python/Glade中處理GUI應用程序,並且遇到以下問題。 我試圖得到一個關於對話框正常工作......然而,當我點擊「關閉」(在關於對話框),然後嘗試再次打開它,這是我所看到的:銷燬有關對話框沒有正確再現
所以,只是窗口的一小段片斷,還有一個不起作用的關閉按鈕。 這是我的課堂我格萊德窗口:
# 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())
不知道你的構建器是如何工作的,但是你確定你的'show_about'實例化了一個新的對話框,而不是從頭開始保存一個對話框嗎? – deinonychusaur
@deinonychusaur:從它看起來像我有...我的猜測會是它擁有一個....我將如何去格式化這個來創建一個新的對話,而不是? – espais
我不認爲我想走多個glade文件的路線(因爲鏈接似乎來回),但我同意我可能會破壞主要實例。你大概知道我可以怎麼做,也許,我的本地'show_about'方法中的原始實例的副本? – espais