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

时间:2019-12-15 13:02:50

标签: python python-3.x tkinter self

我有这段代码,实际上,我正在尝试 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

而且,我不知道问题出在哪里。我通过互联网搜索,找不到答案。

1 个答案:

答案 0 :(得分:0)

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

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

email_Entry现在是一个类属性,因此,也可以从其他方法中调用它。 这样,您的post()方法将变为:

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