0

だから私はリズムトレーナーに取り組んでいて、UIツールキットとしてwxpythonを使用しています。キーボードの押下をバインドしてサウンドを再生する方法を誰かが知っているかどうか疑問に思いましたか?簡単に言うと、ユーザーはキーボードを使用してドラムビートを演奏できます。例「Aキーを押すとバスドラムが鳴ります」

今、私はチュートリアルに出くわしました-

http://www.blog.pythonlibrary.org/2009/08/29/wxpython-catching-key-and-char-events/

しかし、これはサウンドを正常に再生するためにボタンが必要なようです。この例を使用して機能する機能が少しあります。しかし、ボタンを使わずにそれを行う別の方法があるかどうか疑問に思いましたか?

import wx

class MyForm(wx.Frame):


def __init__(self):
    wx.Frame.__init__(self, None, wx.ID_ANY, "Key Press Tutorial")

    # Add a panel so it looks the correct on all platforms
    panel = wx.Panel(self, wx.ID_ANY)
    btn = wx.Button(panel, label="OK")

    btn.Bind(wx.EVT_KEY_DOWN, self.onKeyPress)

def onKeyPress(self, event):
    keycode = event.GetKeyCode()
    print keycode
    if keycode == ord('A'):
        print "you pressed the spacebar!"
        sound_file = "notation1.wav"
        sound=wx.Sound(sound_file)
        print(sound_file)
        sound.Play(wx.SOUND_ASYNC)
    event.Skip()

 # Run the program
if __name__ == "__main__":
    app = wx.PySimpleApp()
    frame = MyForm()
    frame.Show()
    app.MainLoop()

これは、チュートリアルを使用した私の例です。

乾杯!

4

1 に答える 1

1

私のチュートリアルは、フォーカスされているウィジェットのキーストロークをキャッチすることについてです。チュートリアルの場合、それがフォーカスされたボタンであり、それがEVT_KEY_DOWNにバインドされた理由です。残念ながら、パネルはフォーカスをあまり簡単に受け入れないため、SetFocus()を使用してパネルにフォーカスを手動で設定するか、キーイベントをほとんどのウィジェットにバインドすることをお勧めします。

AcceleratorTableを使用できる場合もありますが、それがあなたの状況で機能するかどうかはわかりません。ただし、そのトピックに関するチュートリアルへのリンクは次のとおりです。

http://www.blog.pythonlibrary.org/2010/12/02/wxpython-keyboard-shortcuts-accelerators/

于 2013-02-26T20:48:44.620 に答える