Tkinter按钮调用函数时StringVar对象被识别为str报错求助
问题分析与解决
错误的核心原因是:outline变量原本是Tkinter的StringVar对象,但在代码的某个位置被重新赋值成了普通字符串,而字符串类型没有.set()方法,所以调用outline.set(c)时触发AttributeError。
你贴出的代码片段本身逻辑正确,但错误提示里的代码行号(第133行)和你贴的片段行号不符,说明你的完整代码中,在outline = StringVar()之后,存在类似outline = "某个文本"这样的赋值操作,覆盖了原本的StringVar对象。
修复步骤
- 全局搜索代码中所有对
outline的赋值语句,找到并删除/修改那些将outline赋值为普通字符串的代码,确保outline始终保持为StringVar类型对象。 - 另外建议拆分控件创建与布局代码:比如你原本写的
outline_label = ttk.Label(...).grid(...),grid()方法返回None,会导致outline_label实际是None,后续若误操作该变量也可能引发问题,拆分后更清晰:outline_label = ttk.Label(content, textvariable=outline) outline_label.grid(column=1, row=3, sticky=(W, E))
验证修复后的完整代码
如果你的完整代码中没有其他干扰逻辑,以下代码可以正常运行:
from tkinter import * from tkinter import ttk import pyperclip def update_outline(): c = pyperclip.paste() outline.set(c) root = Tk() content = ttk.Frame(root, padding="3 3 12 12") content.grid(column=0, row=0, sticky=(N, W, E, S)) root.geometry('1200x800') outline = StringVar() outline_button = ttk.Button(content, text="Paste", command=update_outline) outline_button.grid(column=1, row=2, sticky=W) outline_label = ttk.Label(content, textvariable=outline) outline_label.grid(column=1, row=3, sticky=(W, E)) root.mainloop()
内容的提问来源于stack exchange,提问作者Otto94
相关产品推荐
相关产品推荐

