![](/img/trans.png)
[英]Reopen window throws Gtk-CRITICAL **: gtk_widget_get_window: assertion 'GTK_IS_WIDGET (widget)' failed
[英]Cannot access text entry box after reopen the GTK window
首先,這個問題只發生在WIN7中,它通常在raspberry pi(Debian Linux)下。
我有兩個窗口,主窗口和一個子窗口。 主窗口有一個可以激活子窗口的按鈕。 子窗口有一個可以輸入字符串的文本輸入框。 問題是在第一次激活子窗口時,文本輸入框功能正常。 但是當子窗口關閉並重新打開時,文本輸入框似乎被禁用,無法輸入任何文本,即使set_text(“xx”)函數也無法將任何文本寫入其中。
詳細步驟如下:
運行py腳本
單擊主窗口上的按鈕以打開子窗口。 我試過以下三種方法,似乎它們有同樣的問題:
def on_button_clicked(self, widget, data=None): self.child_window.present() #self.child_window.show() #self.child_window.show_all()
現在打開子窗口並且文本輸入框功能正常,我可以在其中鍵入任何文本。
關閉子窗口。 我已將刪除信號綁定到子窗口。 因此,每次關閉子窗口時,將執行以下函數,這將隱藏當前子窗口。
def on_WindowOfScanning_delete_event(self, widget, data=None): self.child_window.hide() return True
現在主窗口處於焦點位置,然后單擊按鈕再次激活子窗口。
self.child_window.present()
現在出現子窗口,但文本輸入框似乎已禁用。
任何人都可以幫我解決這個問題? 贊賞...
版本信息是:Python 2.7.3 GTK 2.24.2,我使用glade來管理GUI界面。
=================同一個問題有一個不同的例子:=====================
http://www.pygtk.org/pygtk2tutorial/sec-TextEntries.html#entryfig
這個鏈接是pygtk的官方例子。 在我的WIN7(64位)系統上運行時,自第一次打開以來無法編輯文本輸入框。 但是,如果您移動鼠標以激活其他窗口,然后返回此gtk窗口,則可以編輯文本輸入框。 我不確定這是否是pygtk的錯誤。
我用pygtk2.24.2-all-in-one嘗試了python 2.6.6和2.7.3。
=================這個問題的解決方案:=====================
似乎沒有人有這樣的問題,所以我發布自己的解決方案。
1,放棄使用window.hide()函數。
2,每次完成其工作時銷毀子窗口,並再次重新啟動gtk.Window以調用子窗口。 這是一個簡單的例子:
#!/usr/bin/env python
import pygtk
pygtk.require( "2.0" )
import gtk
class PopupExample(gtk.Window):
def __init__( self ):
gtk.Window.__init__(self)
self.connect("destroy", lambda *w: gtk.main_quit())
button = gtk.Button("Popup Window")
button.connect("clicked", self.show_popup_window)
self.add(button)
def show_popup_window(self, button):
popup = gtk.Window()
popup.add(gtk.Entry())
popup.show_all()
if __name__ == "__main__":
pe = PopupExample()
pe.show_all()
gtk.main()
我在gnucash
和inkscape
遇到了同樣的問題,我通過進入Control Panel -> Locales and Languages and set format to English(US)
解決了這個問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.