如何让Tkinter的create_text只输出字母数字而非按键名称
只捕获字母数字按键的Tkinter实现方案
不用手动维护排除列表,直接利用Tkinter事件对象的char属性就能解决问题——char只会返回可打印的字符(非字符键的char值为空字符串),再结合str.isalnum()方法就能严格过滤出字母和数字。
修改后的代码如下:
from tkinter import * class GUI: def __init__(self, master): self.i = StringVar(master, '0') self.master = master self.mouseClick = None # 初始化画布(补充原代码缺失的画布定义) self.canva1 = Canvas(master, width=800, height=600) self.canva1.pack() # 绑定鼠标点击事件记录输入位置 self.canva1.bind("<Button-1>", self.clicked) # 绑定按键事件,直接传递event对象 master.bind("<Any KeyPress>", self.drawText) def clicked(self, event): # 记录鼠标点击的坐标 self.mouseClick = event def drawText(self, event): key = event.char # 仅当有点击位置、按键为非空字符且是字母/数字时绘制 if self.mouseClick is not None and key and key.isalnum(): self.canva1.create_text(self.mouseClick.x, self.mouseClick.y, text=key) # 偏移下一个字符的绘制位置 self.mouseClick.x += 6 master = Tk() GUI(master) master.mainloop()
关键修改说明:
- 替换
event.keysym为event.char:keysym返回按键的系统标识名(比如退格键返回backSpace),而char仅返回按键对应的可打印字符,非字符键会返回空字符串。 - 增加
key.isalnum()判断:确保只有字母(大小写)和数字才会被绘制,若需要保留标点等其他可打印字符,去掉该判断即可。 - 移除手动排除列表:无需维护
keys排除集合,依赖原生属性和字符串方法更高效,也不会出现遗漏按键的情况。
内容的提问来源于stack exchange,提问作者Daniel Santana
相关产品推荐
相关产品推荐

