3

まず第一に、この問題はWIN7でのみ発生し、通常はラズベリーパイ(Debian Linux)で発生します。

メインウィンドウと子ウィンドウの2つのウィンドウがあります。メインウィンドウには、子ウィンドウをアクティブ化できるボタンがあります。子ウィンドウには、文字列を入力できるテキスト入力ボックスがあります。問題は、子ウィンドウを初めてアクティブにしたときに、テキスト入力ボックスが機能することです。ただし、子ウィンドウを閉じて再度開くと、テキスト入力ボックスが無効になっているように見え、テキストを入力できません。set_text( "xx")関数でもテキストを書き込むことができません。

詳細な手順は次のとおりです。

  1. pyスクリプトを実行します

  2. メインウィンドウのボタンをクリックして、子ウィンドウを開きます。以下の3つの方法で試しましたが、同じ問題があるようです。

    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. これで子ウィンドウが表示されますが、テキスト入力ボックスが無効になっているようです。

誰かがこの問題について私を助けることができますか?そのために感謝します。

バージョン情報はPython2.7.3GTK 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でpython2.6.6と2.7.3を試しました。

=================この問題の解決策:=====================

そんな問題はないようですので、自分で解決策を投稿します。

まず、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()
4

1 に答える 1