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

时间:2012-12-26 08:48:00

标签: python gtk pygtk glade

首先,这个问题只发生在WIN7中,它通常在raspberry pi(Debian Linux)下。

我有两个窗口,主窗口和子窗口。主窗口有一个可以激活子窗口的按钮。子窗口有一个可以输入字符串的文本输入框。问题是在第一次激活子窗口时,文本输入框功能正常。但是当子窗口关闭并重新打开时,文本输入框似乎被禁用,无法输入任何文本,即使set_text(“xx”)函数也无法将任何文本写入其中。

详细步骤如下:

  1. 运行py脚本

  2. 单击主窗口上的按钮以打开子窗口。我尝试过以下三种方法,似乎它们有同样的问题:

    def on_button_clicked(self, widget, data=None):
        self.child_window.present()
        #self.child_window.show()
        #self.child_window.show_all()
    
  3. 现在打开子窗口并且文本输入框功能正常,我可以在其中键入任何文本。

  4. 关闭子窗口。我已将删除信号绑定到子窗口。因此,每次关闭子窗口时,将执行以下函数,这将隐藏当前子窗口。

    def on_WindowOfScanning_delete_event(self, widget, data=None):
        self.child_window.hide()
        return True
    
  5. 现在主窗口处于焦点位置,然后单击按钮再次激活子窗口。

    self.child_window.present()
    
  6. 现在出现子窗口,但文本输入框似乎已禁用。

  7. 任何人都可以帮我解决这个问题吗?赞赏...

    版本信息是: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()函数。

    第二,每次完成作业时销毁子窗口,并再次重新启动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()
    

1 个答案:

答案 0 :(得分:0)

我在gnucashinkscape遇到了同样的问题, 我进入Control Panel -> Locales and Languages and set format to English(US)

解决了这个问题