如何在 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()
我有这个代码,实际上,我正在尝试 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()