Python 重新打开GTK窗口后无法访问文本输入框

Python 重新打开GTK窗口后无法访问文本输入框,python,gtk,pygtk,glade,Python,Gtk,Pygtk,Glade,首先,这个问题只发生在WIN7中,通常在raspberry pi(Debian Linux)下 我有两个窗口,主窗口和子窗口。主窗口有一个按钮,可以激活子窗口。子窗口有一个文本输入框,可以输入字符串。问题在于,当第一次激活子窗口时,文本输入框可以正常工作。但是,当子窗口关闭并重新打开时,文本输入框似乎被禁用,无法向其中输入任何文本,甚至set_text(“xx”)函数也无法向其中写入任何文本 具体步骤如下: 运行py脚本 单击主窗口上的按钮打开子窗口。我尝试过以下三种方法,似乎它们都有相同的问题

首先,这个问题只发生在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界面

    =========================================================================

    这个链接是pygtk的官方示例。在我的WIN7(64位)系统上运行时,文本输入框自第一次打开后无法编辑。但是,如果您移动鼠标以激活其他窗口,并返回此gtk窗口,则可以编辑文本输入框。我不确定这是否是pygtk的bug

    我已经使用pygtk2.24.2-all-in-one尝试了python 2.6.6和2.7.3

    ===================================================================

    似乎没有人有这样的问题,所以我发布了自己的解决方案

    首先,放弃使用window.hide()函数

    第二,每次完成子窗口的工作时都销毁它,然后再次初始化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
    中遇到了同样的问题,
    我通过进入
    控制面板->地区和语言并将格式设置为英语(美国)

    解决了这个问题。实际上,即使使用pygtk自己的示例,文本输入框也有问题。在此URL中,当窗口弹出时,文本输入框可以显示“hello world”,但不能输入或修改文本。我刚刚试过使用windows xp,但它也不起作用。我对这个问题有点厌倦了。有什么方法可以调试到pygtk中吗?