首先这个问题只在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()函数。
2nd,每次完成工作时销毁子窗口,并再次重新初始化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()