Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wxpython键盘绑定_Python_Wxpython - Fatal编程技术网

Wxpython键盘绑定

Wxpython键盘绑定,python,wxpython,Python,Wxpython,所以我正在开发一个节奏训练器,并使用wxpython作为UI工具包。我想知道是否有人知道如何绑定键盘按键来播放声音?所以简单地说,用户可以使用键盘来击鼓。示例“按A键将播放低音鼓” 现在我遇到了一个教程- 但这似乎需要按钮才能成功播放声音。使用这个例子,我已经有了一些功能。但是我想知道是否有另外一种不用按钮的方法 import wx class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None,

所以我正在开发一个节奏训练器,并使用wxpython作为UI工具包。我想知道是否有人知道如何绑定键盘按键来播放声音?所以简单地说,用户可以使用键盘来击鼓。示例“按A键将播放低音鼓”

现在我遇到了一个教程-

但这似乎需要按钮才能成功播放声音。使用这个例子,我已经有了一些功能。但是我想知道是否有另外一种不用按钮的方法

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()
这是我使用教程的示例


干杯

我的教程是关于在关注的小部件上捕捉击键。在本教程中,这是处于焦点的按钮,这就是它绑定到EVT_KEY_DOWN的原因。遗憾的是,面板并不很容易接受焦点,因此最好使用SetFocus()手动设置面板上的焦点,或者将关键事件绑定到大多数小部件

您可能可以使用AcceleratorTable,但我不确定这是否适用于您的情况。这里有一个关于该主题的教程链接:


将事件绑定到表单,而不是按钮
self.Bind(wx.EVT\u KEY\u DOWN,self.onKeyPress)
而不是
btn.Bind(wx.EVT\u KEY\u DOWN,self.onKeyPress)
。这有帮助吗?嗯,它似乎什么都没做。我想当你在表单上时按下的键将由
onKeyPress
方法处理。单击表单,然后按任意键查看是否调用了该方法。不,即使单击表单,也不会发生任何事情。这很奇怪,所以我根本没办法做我想做的事?除了用按钮绑定之外?看起来像是Panel.bind。当我把它绑定到按钮上时,我不会听到令人讨厌的系统声音。虽然声音不能同时播放。太棒了。我在wxPython邮件列表上看到一些线程,它们似乎暗示这并不总是有效的。不管怎样,我很高兴这帮你弄明白了!