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

为何itemconfig显示数字而非变量?Entry存入Canvas提交后数字异常咨询

解决Canvas出现大量数字的问题

嘿,我懂你遇到的麻烦——提交输入后Canvas突然蹦出一堆数字,完全摸不着头脑对吧?这其实是Tkinter里一个很常见的小疏忽,我来给你拆解一下。

问题根源

你看到的那些数字,其实是Tkinter给Canvas上每个元素分配的唯一ID。通常出现这个问题有两种常见情况:

  • 你直接把StringVar对象传给了canvas.create_text()的text参数,而不是调用.get()方法获取输入框里的实际文本。Tkinter会把这个对象的内部标识转成字符串显示出来,看起来就是一串乱码数字。
  • 你不小心把canvas.create_text()的返回值(也就是那个元素ID)当成了要显示的内容,误把它放到了界面上。

错误代码示例(模拟你的情况)

比如你可能写了类似这样的代码:

from tkinter import *

root = Tk()
canvas = Canvas(root, width=300, height=200)
canvas.pack()

entry_var = StringVar()
entry = Entry(root, textvariable=entry_var)
entry.pack()

def add_text():
    # 错误:直接传了StringVar对象,而不是它的内容
    canvas.create_text(150, 100, text=entry_var)

button = Button(root, text="提交", command=add_text)
button.pack()

root.mainloop()

修正后的代码

只需要加一步获取输入内容的操作,就能解决问题:

from tkinter import *

root = Tk()
canvas = Canvas(root, width=300, height=200)
canvas.pack()

entry_var = StringVar()
entry = Entry(root, textvariable=entry_var)
entry.pack()

def add_text():
    # 关键:调用.get()获取输入框的实际文本
    input_content = entry_var.get()
    # 把文本内容传给create_text的text参数
    canvas.create_text(150, 100, text=input_content, font=("Arial", 12))

button = Button(root, text="提交", command=add_text)
button.pack()

root.mainloop()

额外提示

如果你的代码不是上面这种情况,那可以检查一下是不是不小心把canvas.create_text()的返回值(比如你把它存在变量里,然后又把这个变量当成文本添加了一次)。比如这种错误:

def add_text():
    text_id = canvas.create_text(150, 100, text=entry_var.get())
    # 错误:把text_id(数字ID)又当成文本添加了一次
    canvas.create_text(150, 120, text=text_id)

这种情况也会显示一堆数字,只要去掉多余的那行或者修正参数就行。

内容的提问来源于stack exchange,提问作者Momo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:13:03