在我的CS课上,我的学生刚刚完成了他们的第一个“克隆你的经典”比赛。PONG团队很快地解决了“嘿,我的球拍冻结了”的问题,他们的两个球员在一个键盘版本上。我在5年前遇到了这个问题,并找到了启发我的Python bind - allow multiple keys to be pressed simultaniously (小心!本文使用python2.7)。但我当时并没有意识到这个脚本只能在windows机器上运行。
在linux系统上,<KeyRelease-a>事件触发回调,但是event.char随后会指向‘’,而不是人们所期望的'a‘。我试着用谷歌搜索这个问题,但即使在stackoverflow上我也找不到任何感兴趣的东西。
有什么提示吗?接下来,找到可重现的代码示例:
import os
from tkinter import *
os.system("xset r off")
def keyup(e):
#print(f"up {e.char}")
print(f"up {e.keysym}")
def keydown(e):
#print(f"down {e.char}")
print(f"down {e.keysym}")
root = Tk()
frame = Frame(root, width=100, height=100)
frame.bind("<KeyPress>", keydown)
frame.bind("<KeyRelease>", keyup)
frame.pack()
frame.focus_set()
root.mainloop()
os.system("xset r on")布莱恩问的重复性,我感谢他对我问题的关注。
发布于 2020-12-16 23:04:20
为了结束这个主题,所有的工作都已经由Atlas435完成了:如果你想用Tkinter编写一个乒乓球,用两个球拍独立地监听击键,遵循这篇文章Python bind - allow multiple keys to be pressed simultaniously,但在回调中将e.char更改为e.keysym,以获得哪个键触发了按下或释放的事件。
https://stackoverflow.com/questions/65062802
复制相似问题