遇到TypeError: 'Text'对象无len()方法错误,该如何解决?
解决Tkinter中TypeError: object of type 'Text' has no len()的问题
嘿,这个错误其实很好理解,咱们一步步拆解:
错误原因
你直接对Tkinter的Text组件对象txtNum1调用len()了,但txtNum1是一个组件实例,不是用户输入的字符串内容!Text对象本身没有实现__len__方法,Python根本不知道怎么计算它的长度,自然就抛出这个TypeError了。
修复方法
要获取Text组件里用户输入的内容,必须用它的get()方法,指定内容的起始和结束索引:
- Tkinter中文本的索引格式是
行.列,起始位置是1.0(第一行第0列) - 要获取全部内容,结束索引用
tk.END(或者直接END,如果你是from tkinter import *导入的)
另外要注意:Text组件在用户输入后,末尾会自动添加一个换行符,所以获取内容后最好用strip()去掉前后的空白字符,不然明明输入11位数字,长度会变成12,导致你的校验逻辑出错。
修改后的check_number函数应该是这样的:
def check_number(): # 获取输入内容并去除前后空白(包括自动添加的换行符) input_num = txtNum1.get("1.0", tk.END).strip() if len(input_num) != 11: error_number = "the number that you entered is wrong" msg = tk.Message(frame, text=error_number, fg="red") msg.pack()
完整修复后的代码
import tkinter as tk root = tk.Tk() frame = tk.Frame(root) frame.pack() def check_number(): input_num = txtNum1.get("1.0", tk.END).strip() if len(input_num) != 11: error_number = "the number that you entered is wrong" msg = tk.Message(frame, text=error_number, fg="red") msg.pack() title = tk.Label(frame, text="enter your number", fg="gray") title.pack() txtNum1 = tk.Text(frame, height=1, width=30) txtNum1.pack(side=tk.TOP) button = tk.Button(frame, text="check", fg="green", command=check_number) button.pack(side=tk.BOTTOM) root.mainloop()
(顺便帮你把按钮上的拼写错误"chek"改成了"check"😉)
内容的提问来源于stack exchange,提问作者mohamad
相关产品推荐
相关产品推荐

