为何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
相关产品推荐
相关产品推荐

