在此程序中,我希望用户输入凭据,然后根据输入内容验证它是否正确。我正在使用tkinter提供一个GUI。我希望能够将auth函数带到该类之外,以便一旦登录帐户即可关闭tkinter对话框,但是,这里的问题是auth函数位于该类之内,我尝试了各种方法检索变量,但我没有运气。
from tkinter import *
import tkinter.messagebox as tm
class LoginFrame(Frame):
def __init__(self, master):
super().__init__(master)
self.label_Email = Label(self, text="Email")
self.label_password = Label(self, text="Password")
self.entry_Email = Entry(self)
self.entry_password = Entry(self, show="*")
self.label_Email.grid(row=0, sticky=E)
self.label_password.grid(row=1, sticky=E)
self.entry_Email.grid(row=0, column=1)
self.entry_password.grid(row=1, column=1)
self.checkbox = Checkbutton(self, text="Keep me logged in")
self.checkbox.grid(columnspan=2)
self.logbtn = Button(self, text="Login", command=self._login_btn_clicked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clicked(self):
# print("Clicked")
Email = self.entry_Email.get()
password = self.entry_password.get()
# print(Email, password)
self.answer = auth(Email, password)
root = Tk()
lf = LoginFrame(root)
if 'Bearer' in lf.answer:
root.quit()
root.mainloop()
如果登录成功,我的auth函数将为下一阶段返回一个承载令牌,因此我正在检查answer变量是否已返回它。如果有的话,我将关闭tkinter对话框
答案 0 :(得分:0)
您正在正确地访问实例变量,只是顺序错误。意思是,必须在单击按钮后才检查答案。基本上,在您的GUI加载时或在制作框架后,都不会单击按钮,因此未定义变量,但是您正尝试立即访问它
一个简单的选择是不访问实例变量,而仅使用主服务器的传入Tk对象
def _login_btn_clicked(self):
# print("Clicked")
Email = self.entry_Email.get()
password = self.entry_password.get()
# print(Email, password)
answer = auth(Email, password)
if 'Bearer' in answer:
self.master.quit()