这是什么错误,如何解决?
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__
方法,但效果不佳。
答案 0 :(得分:1)
您的代码中的一个问题是使用if
语句。您询问文本对象是否具有长度而不是检查文本对象的内容。这可以使用get()
来纠正。如果在文本框中使用get()
,则需要指定索引。 .get(1.0, "end")
。这样做的问题是你得到的长度比输入的长1个字符,所以对此的简单解决方法就是在这里使用输入字段。
使用Entry()
字段,您可以使用不带索引的get()
,它将获得该字段中文本的副本。请记住,如果您在文本之前或之后有空格,那么它也会计算在内。如果您想对此进行补偿,可以在strip()
之后添加get()
以删除任意一方的空白区域。
要进行一点清理,您需要更改创建消息的方式。使用您的代码,如果您多次按下按钮,则程序将在每次按下按钮时添加新消息。这将导致消息堆叠。为避免这种情况,我们首先创建消息标签,然后使用.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()