0

この質問はこれまで何度も聞かれたことがあると思いますので、あらかじめお詫び申し上げます。グーグルや検索スタックオーバーフローで答えを見つけることができません。

私はwxライブラリを使用してPythonで作業しています。wx.EVT_CHARフォーカスに関係なく、ユーザーがキーを押すたびにスローする必要があります。これはどのように達成できますか?すべてのウィジェットをバインドする方法はありますか?または、アプリケーションがキーの押下を受信したときに常にイベントをスローする方法はありますか?

アプリケーション自体、メインフレーム、メインパネルをバインドしてみました。これらのどれもwx.EVT_CHAR、キーが押されたときに常にをスローするという仕事を達成していません。

4

1 に答える 1

0

すべてのウィジェットが文字を受け取るように設定し、すべてのウィジェットをコールバック関数にバインドする再帰メソッドを作成することで、問題を解決することができました。非常に単純ですが、すべてのウィジェットが本質的にテキストイベント(ボタンなど)を受信できるわけではないことに気付くのに少し時間がかかりました。うまくいけば、これは将来誰かを節約するでしょう。渡された親ウィンドウの子またはサブ子であるウィジェットのみがコールバックメソッドにバインドされることに注意してください。

def __RecursiveBinding(self, parent):
    try:
        parent.Bind(wx.EVT_CHAR, self.CharInputCallback)
        parent.SetWindowStyleFlag(wx.WANTS_CHARS)
        parent.Refresh()

        children = parent.GetChildren()

        if(children):
            for child in children:
                self.__RecursiveBinding(child)
于 2012-11-16T18:48:57.807 に答える