1

さて、私はどのキーが押されたかをチェックするためのいくつかのコードを思いつきました、それは今かなり基本的です、しかし私が進むにつれて私はここで更新します、ポイントはキーイベントが起こるときはいつでもキーが押されるようにすることです

import wx

class Example(wx.Frame):
    def __init__(self, *args,**kw):
        super(Example, self).__init__(*args,**kw)
        self.InitUI()
    def InitUI(self):
        #frame = wx.Frame(self, style=wx.FRAME_DRAWER | wx.STAY_ON_TOP, size = (100, 100))
        #pnl= wx.Panel(frame)
        pnl= wx.Panel(self)    
        pnl.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
        self.st1 = wx.StaticText(self, label='', pos=(30, 10))
        pnl.SetFocus()
        self.SetSize((250,180))
        self.SetTitle('Key Press Event')
        self.Centre()
        self.Show(True)

    def OnKeyDown(self, e):
        key = e.GetKeyCode()
        if  key==wx.WXK_ESCAPE:
            self.st1.SetLabel("ESCAPE")
        elif key ==wx.WXK_CONTROL:
            self.st1.SetLabel("CTRL")
        elif key==wx.WXK_ALT:
            self.st1.SetLabel("ALT")
        elif key==wx.WXK_BACK:
            self.st1.SetLabel("BACKSPACE")
        elif key== wx.WXK_EXECUTE:
            self.st1.SetLabel("ENTER KEY")
def main():
    ex = wx.App()
    Example(None)
    ex.MainLoop()

if __name__=='__main__':
    main()

このためにフチなしウィンドウを作成しようとしていますが、style = FRAME_DRAWERのフレームにパネルを配置しても機能せず、STAY_ON_TOPも機能しないため、これらの2行にコメントが付けられます。uが機能するかどうかを確認してください。

4

1 に答える 1

2

パネルは、重要なイベントを食べたり、他のウィジェットに渡したりする傾向があります。見る

http://wxpython-users.1045709.n5.nabble.com/Catching-key-events-from-a-panel-and-follow-up-to-stacked-panels-td2360109.html

古いスレッドへのリンク: http://article.gmane.org/gmane.comp.python.wxpython/50485

wxPython の作成者である Robin Dunn の言葉を引用します。

  • キー イベント ハンドラーをすべてのウィジェットにバインドする

  • *EVT_CHILD_FOCUS イベントをキャッチし、フォーカスが子に変更されるたびに、フォーカスを元の場所にリセットします。*

  • キー イベントの代わりに wx.AcceleratorTable を使用して、アプリ内のどのウィジェットにフォーカスがあるかに関係なく、キーストロークがメニュー イベントに変換されるようにします。

  • キー ハンドラーをフレームではなくアプリにバインドします。未処理のイベントはすべて、破棄される前にアプリ オブジェクトに送信されるため、どのウィジェットがフォーカスを持っていても、それがキー イベント自体を処理しない場合、アプリはチャンスを得ることができます。

また、主要なイベントに関する私の古いチュートリアルも同様に啓発的であることに気付くかもしれません。

于 2012-10-31T18:03:31.267 に答える