[英]Issue of scope when getting data from an entry widget
我正在使用 tkinter 进行登录和注册屏幕。 我有一个函数来制作登录和注册屏幕(命名表单),这是入口小部件所在的位置( login_username 和 login_password )。
现在,如果我尝试在函数之外访问这些数据,我会得到一个 NameError,我知道这是一个与作用域有关的问题。
我不想使用全局变量,因为这是不好的做法,但是有没有其他方法可以解决这个问题而不需要大量更改代码? 非常感谢:D
代码:
from tkinter import *
def form(master, label_1_text, label_2_text, button_text, commands):
label_hidden_1=Label(master,text="").pack()
label_hidden=Label(master, text="").pack()
new_username_label=Label(master,text=label_1_text,font=('arial', 10, 'bold')).pack()
login_username=Entry(master, width=40).pack()
label_hidden_2=Label(master,text="").pack()
new_password_label=Label(master,text=label_2_text,font=('arial', 10, 'bold')).pack()
login_password=Entry(master,width=40, show='*')
login_password.pack()
login_password.bind('<Return>', lambda e: commands())
label_hidden_3=Label(master,text="").pack()
login_btn=Button(master,text=button_text,width=20,height=1,font=('arial', 10, 'bold'), command=commands).pack()
master.mainloop()
def main():
def login_user(*args, e=None):
print(login_password.get()) # This is where i get and scope error (NameError)
def register_user(*args, e=None):
print(login_password.get()) # And here also
window = Tk()
window.title('Registration')
window.geometry('275x300')
form(window, 'NEW USERNAME', 'NEW PASSWORD', 'REGISTER', register_user)
window = Tk()
window.title('Login')
window.geometry('275x300')
form(window, 'USERNAME', 'PASSWORD', 'LOGIN', login_user)
if __name__ == '__main__':
main()
阅读评论后,我决定使用 TheLizzard 和 Cool Cloud 提到的类。 谢谢(你的)信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.