wxPython 键绑定不适用于 Linux
wxPython Key Bindings don't work on Linux
以下程序在 Windows 中对我有效,但在 Linux 中无效。当我按下我绑定的键时,没有显示任何打印语句。但是,tab 键可以在两个按钮之间切换,enter 和 space 键可以切换它们。其他键均无效。
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Pressing dem keyz")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.btn = wx.ToggleButton(panel, label="TOGGLE")
self.btn2 = wx.ToggleButton(panel, label="TOGGLE 2", pos = (85,0))
self.btn.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
self.btn2.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
def onKeyPress(self, event):
space = False
keycode = event.GetKeyCode()
print keycode
if keycode == wx.WXK_SPACE:
print "SPACEBAR!"
space = True
self.btn.SetValue(space)
if space == True:
print "Do something"
elif keycode == wx.WXK_RETURN:
self.Hello()
elif keycode == wx.WXK_LEFT:
self.btn2
print 'YOU MOVED LEFT'
elif keycode == wx.WXK_RIGHT:
self.btn
print 'YOU MOVED RIGHT'
elif keycode == wx.WXK_UP:
print 'YOU MOVED UP'
elif keycode == wx.WXK_DOWN:
print 'YOU MOVED DOWN'
elif keycode == wx.WXK_ESCAPE:
self.Destroy()
def Hello(self):
print "Hello"
return
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
而不是使用 EVT_CHAR_HOOK 使用 EVT_KEY_DOWN.
或者确实,EVT_KEY_UP
这消除了按住一个键给出多个按键事件的问题。
以下程序在 Windows 中对我有效,但在 Linux 中无效。当我按下我绑定的键时,没有显示任何打印语句。但是,tab 键可以在两个按钮之间切换,enter 和 space 键可以切换它们。其他键均无效。
import wx
class MyForm(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, wx.ID_ANY, "Pressing dem keyz")
# Add a panel so it looks the correct on all platforms
panel = wx.Panel(self, wx.ID_ANY)
self.btn = wx.ToggleButton(panel, label="TOGGLE")
self.btn2 = wx.ToggleButton(panel, label="TOGGLE 2", pos = (85,0))
self.btn.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
self.btn2.Bind(wx.EVT_CHAR_HOOK, self.onKeyPress)
def onKeyPress(self, event):
space = False
keycode = event.GetKeyCode()
print keycode
if keycode == wx.WXK_SPACE:
print "SPACEBAR!"
space = True
self.btn.SetValue(space)
if space == True:
print "Do something"
elif keycode == wx.WXK_RETURN:
self.Hello()
elif keycode == wx.WXK_LEFT:
self.btn2
print 'YOU MOVED LEFT'
elif keycode == wx.WXK_RIGHT:
self.btn
print 'YOU MOVED RIGHT'
elif keycode == wx.WXK_UP:
print 'YOU MOVED UP'
elif keycode == wx.WXK_DOWN:
print 'YOU MOVED DOWN'
elif keycode == wx.WXK_ESCAPE:
self.Destroy()
def Hello(self):
print "Hello"
return
# Run the program
if __name__ == "__main__":
app = wx.App(False)
frame = MyForm()
frame.Show()
app.MainLoop()
而不是使用 EVT_CHAR_HOOK 使用 EVT_KEY_DOWN.
或者确实,EVT_KEY_UP
这消除了按住一个键给出多个按键事件的问题。