まず第一に、この問題はWIN7でのみ発生し、通常はラズベリーパイ(Debian Linux)で発生します。
メインウィンドウと子ウィンドウの2つのウィンドウがあります。メインウィンドウには、子ウィンドウをアクティブ化できるボタンがあります。子ウィンドウには、文字列を入力できるテキスト入力ボックスがあります。問題は、子ウィンドウを初めてアクティブにしたときに、テキスト入力ボックスが機能することです。ただし、子ウィンドウを閉じて再度開くと、テキスト入力ボックスが無効になっているように見え、テキストを入力できません。set_text( "xx")関数でもテキストを書き込むことができません。
詳細な手順は次のとおりです。
pyスクリプトを実行します
メインウィンドウのボタンをクリックして、子ウィンドウを開きます。以下の3つの方法で試しましたが、同じ問題があるようです。
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()
これで子ウィンドウが表示されますが、テキスト入力ボックスが無効になっているようです。
誰かがこの問題について私を助けることができますか?そのために感謝します。
バージョン情報は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()