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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 15:32:33