首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tkinter <KeyRelease>在Windows和Linux上的不同行为

tkinter <KeyRelease>在Windows和Linux上的不同行为
EN

Stack Overflow用户
提问于 2020-11-30 01:07:47
回答 1查看 86关注 0票数 1

在我的CS课上,我的学生刚刚完成了他们的第一个“克隆你的经典”比赛。PONG团队很快地解决了“嘿,我的球拍冻结了”的问题,他们的两个球员在一个键盘版本上。我在5年前遇到了这个问题,并找到了启发我的Python bind - allow multiple keys to be pressed simultaniously (小心!本文使用python2.7)。但我当时并没有意识到这个脚本只能在windows机器上运行。

在linux系统上,<KeyRelease-a>事件触发回调,但是event.char随后会指向‘’,而不是人们所期望的'a‘。我试着用谷歌搜索这个问题,但即使在stackoverflow上我也找不到任何感兴趣的东西。

有什么提示吗?接下来,找到可重现的代码示例:

代码语言:javascript
复制
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")

布莱恩问的重复性,我感谢他对我问题的关注。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-16 23:04:20

为了结束这个主题,所有的工作都已经由Atlas435完成了:如果你想用Tkinter编写一个乒乓球,用两个球拍独立地监听击键,遵循这篇文章Python bind - allow multiple keys to be pressed simultaniously,但在回调中将e.char更改为e.keysym,以获得哪个键触发了按下或释放的事件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65062802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档