繁体   English   中英

从条目小部件获取数据时的范围问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM