如果满足条目(文本框(的条件,我将尝试显示一个标签。不幸的是,当我按下测试按钮时,我什么都看不见。这是我所拥有的:
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=register
或command=lambda: register()
将尝试调用按钮而不是函数。
第三个问题是一个非常常见的错误。在python中,当执行x = y().z()
时,x
的值为z()
。因此,register = Button(...).pack(...)
返回pack(...)
的值,而pack
(以及grid
和place
(总是返回None
。
因此,您已经将register
设置为None
,当您尝试调用它时,您会得到NoneType object is not callable
。
除了修复command
之外,还需要为函数或按钮选择不同的名称。并且您不应该在创建小部件的同时调用place
(或pack
或grid
(。它们应该是单独的步骤。
所以,把所有这些放在一起,你需要这样定义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)