Python 如何访问tkinter类中的_uinit__;()方法中的元素?

Python 如何访问tkinter类中的_uinit__;()方法中的元素?,python,Python,我正在尝试从下面创建的列表中访问元素。程序在多个页面之间切换,我希望接收来自用户的输入,并将其作为字符串存储在另一个文件中 class SignupPage(tk.Frame): def __init__(self, parent, controller): tk.Frame.__init__(self, parent, bg='light blue') ulabel = tk.Label(self, text="User Name"

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

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()
我想访问另一个文件中的username变量,因此导入了类SignupPage

from app import SignupPage
但是,试图通过键入以下内容来访问元素是行不通的

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

如何访问username变量?

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

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

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

SignupPage.__init__.Signup.credentials_list[0]
我们得做点别的。我们可以做的一件事是将
Signup()
放在
\uuu init\uuuu()
之外,并给出
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)

此时,我们可以通过执行以下操作访问
凭证列表

signupPage.credentials_list
请记住将相同的
SignupPage
实例传递给任何将获取类所具有的任何属性值的对象

我认为我的建议不是最好的设计,但它至少应该给你一个如何解决问题的想法



旁注:一种改进方法是为
SignupPage
提供一个getter方法,该方法返回
凭证列表
的值,而不必通过执行
.credentials\u list
访问上述变量。与其他方法相比,这样做通常是一种更好的编程实践。

与您的问题无关:不要将调用
pack()
的结果分配给一个变量,即
ulabel=tk.Label(self,text=“User Name”).pack()
,因为它总是
None
。创建小部件并将其分配给变量,然后在单独的语句中调用variable.pack()`。
credentials\u list
就是所谓的“局部变量”。它不能通过简单地串在一起的随机名称分类访问。尝试将
credentials\u list
更改为
self.credentials\u list
,将其更改为对象的属性,然后您将能够访问类外的
对象.credentials\u list
。缩进也是问题中的一部分,它应该是什么样子?@AJ123在修复了格式之后,缩进现在应该被修复。我还建议将
Signup()
函数作为一个单独的方法。通过这种方式,您可以在调用该方法时从中返回凭据列表。我使用了这种方法,但得到了以下结果:
File”/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/uuuuu init_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。!已由网格管理从属帧的帧
完整回溯是什么?你可以把它放在一个垃圾桶里。