如何在 class 中访问另一个函数中的变量?

How can I access a variable in another function in a class?

我有这个代码,实际上,我正在尝试 self 因为我不熟悉它:

import tkinter

class AvakinLife:
    def __init__(self):
        self.targetFile = 'D:\AVAKIN_PROJECT\SOFTWARE\order.txt'
        self.cursor = ["arrow", "circle", "clock", "cross", "dotbox", "pirate"]
        self.background = 'black'
        self.fg = '#00ff00'
        self.font = 'bold'
        self.mod = 'w+'
        self.GUI = tkinter.Tk()
        self.GUI.title('Avakin Life Resources Generator')
        self.GUI.geometry('350x200')
        self.GUI.configure(background='black', cursor=self.cursor[5])

    def post(self):
        f = open(self.targetFile, self.mod)
        with f as writer:
            # Here is my problem
            writer.write("email> " + email_Entry.get() + '\r')
        writer.close()

    def create_GUI(self):
        emailLabel = tkinter.Label(master=self.GUI, text='Account e-mail: ', background=self.background, fg=self.fg)
        emailLabel.grid(row=0, column=0, pady=4)
        email_Entry = tkinter.Entry(master=self.GUI, background=self.background, fg=self.fg, font=self.font)
        email_Entry.grid(row=0, column=1)

        send = tkinter.Button(master=self.GUI, text='Send', background=self.background, fg=self.fg, font=self.font,width=10, command=AL.post)
        send.grid(row=4, column=0, pady=8)

        self.GUI.mainloop()

if __name__ == '__main__':
    AL = AvakinLife()
    AL.create_GUI()

错误是:

writer.write("email> " + email_Entry.get.get() + '\r')
NameError: name 'email_Entry' is not defined

而且,我不知道问题出在哪里。我在网上搜索过,没有找到答案。

您在 create_GUI() 方法中定义的名为 email_entry 的变量是局部变量。 因此,您将无法在该方法之外使用该变量。 要解决此问题,您只需将该局部变量设置为 class 属性即可。 self 关键字就是这样做的。 通过做:

    self.email_Entry = tkinter.Entry(master=self.GUI, background=self.background, fg=self.fg, font=self.font)

email_Entry 现在是 class 属性 因此,它也可以从其他方法调用。 话虽如此,您的 post() 方法将变为:

    def post(self):
        f = open(self.targetFile, self.mod)
        with f as writer:
            writer.write("email> " + self.email_Entry.get() + '\r')
        writer.close()