python-3.x - 如何访问类变量?
问题描述
在这个程序中,我希望用户输入凭据,然后根据输入验证它是否正确。我正在使用 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 对话框
解决方案
您正在正确地访问实例变量,只是以错误的“顺序”。意思是,只有在单击按钮后才能检查答案。基本上,当您的 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()
推荐阅读
- html - 在这种情况下,我如何将按钮推到 CSS flexbox 的底部?
- php - Wordpress :: 需要通过 Wordpress 根文件夹中的额外 script.php 文件调用 Ajax Action
- firebase - Flutter Login 与 firebase 返回 ERROR_INVALID_EMAIL
- kotlin - 如何更简洁地重写这个 Kotlin 过滤器方法?
- opencl - 我可以在编译时检查 OpenCL 内核语法吗?
- php - 模块语言在 Prestashop 1.7.6 中不起作用
- prometheus - 如果 30 分钟内未更改,则返回指标值
- python - 比较两个 csv 文件,打印出 csv 中的差异,但如果差异打印全部同名
- c++ - 使用 Gtkmm 以编程方式在 Gtk::TextView 中选择文本
- android - Android:已安装的应用程序在主屏幕上没有图标