繁体   English   中英

如何访问 tkinter 类中 __init__() 方法中的元素?

[英]How can I access the element in a __init__() method in a tkinter class?

我正在尝试从下面创建的列表中访问一个元素。 该程序在多个页面之间切换,我希望接收来自用户的输入以将其作为字符串存储在另一个文件中。

class SignupPage(tk.Frame):
    def __init__(self, parent, controller):

        tk.Frame.__init__(self, parent, bg='light blue')

        ulabel = tk.Label(self, text="User Name").pack()
        uname = tk.StringVar()
        uEntry = tk.Entry(self, textvariable=uname). pack()

        plabel = tk.Label(self, text='Password').pack()
        psswd = tk.StringVar()
        pEntry = tk.Entry(self, textvariable=psswd).pack()

        def Signup():
            username = uname.get()
            password = psswd.get()

            credentials_list = [username, password]
            print(credentials_list)
            print(username, password)

            controller.show_frame(SignupPage2)

        nextbutton = tk.Button(self, text='Next', command=Signup).pack()
        backbutton = tk.Button(
            self, text='Back', command=lambda: controller.show_frame(WelcomePage)).pack()

我想访问另一个文件中的用户名变量,所以我导入了类 SignupPage。

from app import SignupPage

但是,尝试通过键入以下内容来访问该元素是行不通的。

print(SignupPage.__init__.Signup.credentials_list[0])

如何访问用户名变量?

让我们从SignupPage类中的以下函数开始:

def Signup():
    username = uname.get()
    password = psswd.get()

    ...

您想访问该函数内的username 不幸的是, username只存在于Signup() ,不能使用点运算符访问。 函数内的其余变量也是如此。 因此,您无法通过使用获取用户名值

SignupPage.__init__.Signup.credentials_list[0]

我们必须做其他事情。 我们可以做的一件事是将Signup()放在__init__()之外,并为SignupPage一些实例变量。 SignupPage类将类似于以下内容。

class SignupPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent, bg='light blue')

        self.credentials_list = list()

        ulabel = tk.Label(self, text="User Name").pack()
        self.uname = tk.StringVar()
        uEntry = tk.Entry(self, textvariable=self.uname). pack()

        plabel = tk.Label(self, text='Password').pack()
        self.psswd = tk.StringVar()
        pEntry = tk.Entry(self, textvariable=self.psswd).pack()

        nextbutton = tk.Button(self, text='Next', command=self.Signup).pack()
        backbutton = tk.Button(self, text='Back', command=lambda: controller.show_frame(WelcomePage)).pack()
        self.pack()

    def Signup(self):
        username = self.uname.get()
        password = self.psswd.get()

        self.credentials_list = [username, password]
        print(self.credentials_list)
        print(username, password)

        controller.show_frame(SignupPage2)

有了这个,当我们按下“下一步”按钮时, SignupPage类的一个实例将保存在用户名和密码文本字段中输入的值。 要创建类的实例,我们只需执行以下操作:

# root = tk.Tk()
signupPage = SignupPage(root, controller)

此时,我们现在可以通过执行以下操作访问credentials_list

signupPage.credentials_list

请记住将SignupPage的相同实例SignupPage给将获得该类具有的任何属性值的任何内容。

我认为我的建议不是最好的设计,但它至少应该让你知道如何解决你的问题。


边注:可以提高在这方面的一个方法是使用为提供一个getter方法SignupPage该回报的价值credentials_list而不必做访问上述变量, <instance>.credentials_list 这样做通常是比其他方法更好的编程实践。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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