嘿我试图从班级中获取一个变量,但由于某种原因它没有通过。它可能非常简单,但我真的无法想到任何事情
以下是尚未完成的代码我还只创建了一个登录屏幕:
from tkinter import *
import tkinter.messagebox as tm
correct = False
#-------------Functions-----------------------------------------------------
class LoginMenu(Frame):
def __init__(self, master):
super().__init__(master)
self.label_2 = Label(self, text="Welcome to the rota system")
self.label_3 = Label(self, text="Please enter the password to continue:")
self.label_1 = Label(self, text="Password")
self.entry_1 = Entry(self)
self.label_1.grid(row=3, sticky=W)
self.label_2.grid(row=1, sticky=W)
self.label_3.grid(row=2, sticky=W)
self.entry_1.grid(row=3, sticky=W)
self.logbtn = Button(self, text="Login", command = self.login_btn_clicked)
self.logbtn.grid(columnspan=2)
self.pack()
def login_btn_clicked(self):
password = self.entry_1.get()
if password == "1234":
correct = True
else:
tm.showerror("Login error", "Incorrect password")
return correct
#-----------------Main-Program----------------------------------------------
window = Tk()
LoginMenu(window)
if correct == True:
print("Yay")
LoginMenu.self.destroy()
window.mainloop()
答案 0 :(得分:3)
班级中的变量只有本地范围。
一种好方法是将变量correct
定义为类成员:
class LoginMenu(Frame):
def __init__(self, master):
super().__init__(master)
self.correct = False
然后在你的函数中设置它:
def login_btn_clicked(self):
password = self.entry_1.get()
if password == "1234":
self.correct = True
您可以通过全球范围访问它(不需要== True
,顺便说一句)
loginmenu = LoginMenu(window)
if loginmenu.correct:
问题是,这在你的情况下不会起作用。您在if
构造后输入主循环。请查看Tkinter文档如何正确构建Tkinter应用程序。
答案 1 :(得分:1)
要在本地范围内引用全局变量,您必须在类中定义该变量,如下所示:
global correct
(在函数login_btn_clicked中)