TypeError:“Text”类型的对象没有len()

2024-10-02 10:27:17 发布

您现在位置:Python中文网/ 问答频道 /正文

这个错误是什么?我如何修复它?在

    def check_number():
    if (len(txtNum1)!=11):
        error_number = "the number that you entered is wrong"
        msg = tk.Message(frame, text = error_number , fg="red")
        msg.pack()

title = Label(frame, text="enter your number", fg="gray")
title.pack()

txtNum1 = Text (frame, height=1, width=30)
txtNum1.pack(side=tk.TOP)

button = tk.Button(frame, 
                   text="chek", 
                   fg="green",
                   command=check_number)
button.pack(side=tk.BOTTOM)

root.mainloop()

我只是测试了__len__方法,但效果不好。在


Tags: textnumberlentitlecheck错误buttonmsg
1条回答
网友
1楼 · 发布于 2024-10-02 10:27:17

代码中的一个问题是使用if语句。您询问的是文本对象是否具有长度,而不是检查文本对象的内容。这可以通过使用get()来纠正。如果在文本框中使用get(),则需要指定索引。.get(1.0, "end")。这样做的问题是,你得到的长度将比输入的长度长1个字符,因此解决这个问题的简单方法是在这里使用一个输入字段。在

对于Entry()字段,您可以使用不带索引的get(),它将获得该字段中文本的副本。请记住,如果你在文本之前或之后有一个空格,它也会计算在内。如果您想弥补这一点,您可以在get()之后添加strip()来删除两边的空白。在

为了稍微清理一下,你会想改变你创建信息的方式。用你的代码,如果你按下按钮多次,那么程序将添加一个新的消息与每一个按钮按下。这将导致消息堆叠。为了避免这种情况,让我们先创建消息标签,然后使用.config()方法用我们的函数更新它。在

下一步的清理工作是删除对不需要它们的小部件的变量赋值。在这种情况下,不需要将第一个标签和按钮指定给变量。在

最后一点清理是确保你与你的小部件一致。现在(基于您的示例代码),您正在导入tkinter两次。一次使用from tkinter import *,一次使用import tkinter as tk。您不需要同时使用这两种方法,应该只使用第二种导入方法。使用import tkinter as tk将有助于防止意外重写内置方法。在

请看我下面的代码:

import tkinter as tk

root = tk.Tk()

def check_number():
    msg.config(text = "")
    if len(txtNum1.get().strip()) != 11:
        error_number = "the number that you entered is wrong"
        msg.config(text = error_number)

tk.Label(root, text="enter your number", fg="gray").pack()

txtNum1 = tk.Entry(root, width=30)
txtNum1.pack(side=tk.TOP)

tk.Button(root, text="chek", fg="green", command=check_number).pack(side=tk.BOTTOM)

msg = tk.Message(root, text = "" , fg="red")
msg.pack()

root.mainloop()

相关问题 更多 >

    热门问题