Tkinter 主循环坏了,消息框不断弹出
Tkinter mainloop broken, messagebox keeps popping up
class StartUp():
def __init__(self):
pass
def verify(self):
username = ("s")
password = ("s")
usernameEntry = usernameVar.get()
passwordEntry = passVar.get()
start = StartUp()
if usernameEntry == username and passwordEntry == password:
start.login()
else:
#messagebox.showerror("Error","Wrong Credentials")
def login(self):
#Create a window
global usernameVar, passVar
verify = StartUp()
window = Tk()
window.title("Login")
userPassLabel = Label(window, font="Helvetica 18 bold", text="Royal Mail")
userPassLabel.grid(row=0, column=0, sticky=W)
usernameVar = StringVar()
usernameLabel = Label(window, font="Arial", text="Username:")
usernameLabel.grid(row=1, column=0, sticky=W)
usernameEntry= Entry(window, width=30, bg="light blue",textvariable = usernameVar, )
usernameEntry.grid(row=1, column=1, sticky=W)
passVar = StringVar()
passLabel = Label(window, font="Arial", text="Password:")
passLabel.grid(row=2, column=0, sticky=W)
passEntry= Entry(window, width=30, bg="light blue",textvariable = passVar, show ="●")
passEntry.grid(row=2, column=1, sticky=W)
b1= Button(window, text="Enter", command=verify.verify())
b1.grid(row=3, column=0, sticky=W)
window.mainloop()
start = StartUp()
start.login()
代码似乎不起作用。消息框将弹出。然后输入按钮不起作用。不知道哪里出了问题。我是 OOP 的新手,所以不确定是否与此有关。
另一个问题是我如何能够将一个变量从一个 window/class 中的输入框传送到另一个 window/class 中? global 是一个可行的选项还是有更好的方法我可以从输入框中使用 .get()。
感谢帮助
当您使用 ()
时,您将立即调用该函数。当您将 ()
与按钮一起使用时,它破坏了拥有按钮本身的目的。所以去掉括号,()
.
b1 = Button(window, text="Enter", command=verify.verify)
调用函数时,条目内的值为空,因此触发 else
。
class StartUp():
def __init__(self):
pass
def verify(self):
username = ("s")
password = ("s")
usernameEntry = usernameVar.get()
passwordEntry = passVar.get()
start = StartUp()
if usernameEntry == username and passwordEntry == password:
start.login()
else:
#messagebox.showerror("Error","Wrong Credentials")
def login(self):
#Create a window
global usernameVar, passVar
verify = StartUp()
window = Tk()
window.title("Login")
userPassLabel = Label(window, font="Helvetica 18 bold", text="Royal Mail")
userPassLabel.grid(row=0, column=0, sticky=W)
usernameVar = StringVar()
usernameLabel = Label(window, font="Arial", text="Username:")
usernameLabel.grid(row=1, column=0, sticky=W)
usernameEntry= Entry(window, width=30, bg="light blue",textvariable = usernameVar, )
usernameEntry.grid(row=1, column=1, sticky=W)
passVar = StringVar()
passLabel = Label(window, font="Arial", text="Password:")
passLabel.grid(row=2, column=0, sticky=W)
passEntry= Entry(window, width=30, bg="light blue",textvariable = passVar, show ="●")
passEntry.grid(row=2, column=1, sticky=W)
b1= Button(window, text="Enter", command=verify.verify())
b1.grid(row=3, column=0, sticky=W)
window.mainloop()
start = StartUp()
start.login()
代码似乎不起作用。消息框将弹出。然后输入按钮不起作用。不知道哪里出了问题。我是 OOP 的新手,所以不确定是否与此有关。
另一个问题是我如何能够将一个变量从一个 window/class 中的输入框传送到另一个 window/class 中? global 是一个可行的选项还是有更好的方法我可以从输入框中使用 .get()。
感谢帮助
当您使用 ()
时,您将立即调用该函数。当您将 ()
与按钮一起使用时,它破坏了拥有按钮本身的目的。所以去掉括号,()
.
b1 = Button(window, text="Enter", command=verify.verify)
调用函数时,条目内的值为空,因此触发 else
。