这是我最近一直在努力解决的一个话题。这里要检查的另一件事是您是否在不同的键盘布局中获得正确的值。例如,当您切换到法语 - PC 布局时,pygame 似乎无法正确报告数字键代码。我的建议是使用 wxPython。它在 RawKeyCode 属性中公开平台特定的键代码。这是一个代码示例,它演示了:
import logging as log
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, title):
wx.Frame.__init__(self, parent, title=title, size=(200,100))
self.panel = wx.Panel(self, wx.ID_ANY)
self.panel.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
self.panel.Bind(wx.EVT_KEY_UP, self.OnKeyDown)
self.panel.Bind(wx.EVT_CHAR, self.OnKeyDown)
self.panel.SetFocus()
self.Show(True)
def OnKeyDown(self, event=None):
line_txt = '---------------------'
print(line_txt)
for var in ['RawKeyCode', 'KeyCode', 'UnicodeKey']:
print(var, getattr(event, var))
if var == 'UnicodeKey':
print('char', chr(getattr(event, var)))
print(line_txt)
if __name__ == "__main__":
app = wx.App(False)
gui = MainWindow(None, "test")
app.MainLoop()
例如,当我在我的 mac 上按下 fn 键(一个 mac 专用键)时,我看到这个记录:
---------------------
RawKeyCode 63
KeyCode 0
UnicodeKey 0
char
---------------------
这与此处的平台特定键码一致。