使用Tkinter Text组件制作取色器时遇'unicode'对象无'get'属性错误
解决Tkinter Text组件取色器的'unicode' object has no attribute 'get'错误
这个错误其实很好排查——说白了就是你调用get()方法的对象根本不是Tkinter的Text组件实例,而是一个普通的字符串(Python3里的unicode就是str类型)。字符串本身没有get()方法,所以才会抛出这个异常。
常见错误场景&解决办法
我先给你举两个典型的错误例子,再对应给出正确的写法:
错误场景1:变量被错误赋值为字符串
比如你本来想创建Text组件,结果不小心把一个颜色字符串赋值给了同一个变量:
from tkinter import Tk, Text root = Tk() # 错误:这里把字符串赋值给了text_box,覆盖了原本的组件实例 text_box = "#ff0000" # 接下来调用get()自然报错 color_code = text_box.get("1.0", "end-1c")
正确写法:确保text_box是Text组件的实例,且后续没有被重新赋值:
from tkinter import Tk, Text, Button root = Tk() # 正确创建Text组件实例 text_box = Text(root, width=20, height=1) text_box.pack(pady=10) def fetch_color(): # 调用Text组件的get()方法,参数是文本索引范围 # "1.0"代表第一行第0列,"end-1c"代表末尾去掉默认的换行符 color_code = text_box.get("1.0", "end-1c") print(f"获取到的颜色码:{color_code}") Button(root, text="提取颜色", command=fetch_color).pack() root.mainloop()
错误场景2:误对字符串结果调用get()
有时候你可能先获取了Text的内容存到变量里,然后又下意识给这个变量调用get():
# 错误示例 temp_content = text_box.get("1.0", "end-1c") # temp_content是字符串,再调用get()肯定报错 final_color = temp_content.get()
解决办法:直接使用temp_content即可,不需要再调用get()——它已经是文本框里的内容了。
快速排查技巧
如果你不确定哪个变量出了问题,可以在调用get()之前加一行打印:
print(type(text_box))
- 如果输出是
<class 'tkinter.Text'>,说明这是正确的组件实例; - 如果输出是
<class 'str'>,那你就要回头找代码里哪里把这个变量改成字符串了。
内容的提问来源于stack exchange,提问作者user9437617
相关产品推荐
相关产品推荐

