标签有条件显示



如果满足条目(文本框(的条件,我将尝试显示一个标签。不幸的是,当我按下测试按钮时,我什么都看不见。这是我所拥有的:

from tkinter import *
main= Tk()
firstname=Entry(main).place(x=30, y=50)
def register():
if any(i.isdigit() for i in firstname.get())== True:
print (Label(main,text='no numbers please').place(x=30, y=180))
else:
print(Label(main, text='pass').place(x=40, y=170))
register=Button(main,text='REGISTER', command= lambda :register).place(x=300, y=200)

您的代码至少有三个问题。第一个是如何定义按钮的命令:

register=Button(main,text='REGISTER', command= lambda :register)

当你做command=lambda: register时,你告诉按钮";当您被点击时运行代码register";。register本身什么也不做。由于register是(应该是(一个函数,因此需要在lambda内部像register()一样调用它。

由于没有向函数传递任何值,因此lambda是完全不必要的。相反,只需直接引用函数:command=register而不使用括号。

第二个问题是,您使用名称register是两个不同的东西:一个函数和对小部件的引用。由于代码的顺序,command=registercommand=lambda: register()将尝试调用按钮而不是函数。

第三个问题是一个非常常见的错误。在python中,当执行x = y().z()时,x的值为z()。因此,register = Button(...).pack(...)返回pack(...)的值,而pack(以及gridplace(总是返回None

因此,您已经将register设置为None,当您尝试调用它时,您会得到NoneType object is not callable

除了修复command之外,还需要为函数或按钮选择不同的名称。并且您不应该在创建小部件的同时调用place(或packgrid(。它们应该是单独的步骤。

所以,把所有这些放在一起,你需要这样定义firstname,这样firstname就不是None:

firstname=Entry(main)
firstname.place(x=30, y=50)

然后你需要定义这样的按钮:

register_button = Button(main,text='REGISTER', command= register)
register_button.place(x=300, y=200)

最新更新