You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:05:13