我对OOP很新,但我可以看到它的好处。我编写了一个类(根据zetcode的一个例子构建),它创建了一个窗口,并在其中放入一个输入框和一个按钮。另外,我有一个发送电子邮件的功能(我的实际发送代码来自我制作的模块sendEmail)。代码:
import sendEmail
from tkinter import *
class mainWindow(Frame):
def __init__(self, parent):
Frame.__init__(self, parent, bg = "#C2C2D6")
self.parent = parent
self.initUI()
def initUI(self):
self.parent.wm_title("Email")
self.parent.config(height = 370, width = 670)
email_entry = Entry(self, exportselection = 0, width = 200).pack()
send_button = Button(self, text = "Send", command = self.send).pack()
self.pack()
def send(self):
body = email_entry.get()
sendEmail.sendEmail("jacob.kudria@gmail.com", "anon.vm45@gmail.com", "jacob.kudria", "2good4you!", body)
def main():
root = Tk()
main_window = mainWindow(root)
root.mainloop()
if __name__ == '__main__':
main()
首先,这段代码不起作用(发送部分),但这并不奇怪,我希望这个问题的答案能解决它。我的主要问题是:如何创建send函数,因此可以从外部访问email_entry变量(end函数使用该变量)?换句话说,我希望我的图形在一个类中,其余的不是。基本上,我在类中声明了输入框变量,但我想在类的外部中使用send函数。随后,我希望能够从发送按钮的类里面访问send函数。这是否涉及使它们全球化??
此外,这段代码可能到目前为止还不是最好的,我对python仍然不是很好。随着我的进展,我会改进它。关于代码的任何提示,除了我的主要问题?
答案 0 :(得分:1)
让email_entry
成为班级的一个字段。
class mainWindow(Frame):
# ...
def initUI(self):
# ...
# note self here
self.email_entry = Entry(self, exportselection = 0, width = 200).pack()
# ...
def send(self):
# note self here
body = self.email_entry.get()
# ...
基本上,在您的代码中email_entry
只是initUI
函数(方法)的局部变量。您希望它是实例的字段。
答案 1 :(得分:1)
最简单的可能是让email_entry
成为班级中的一个字段。但是,您也可以从initUI
函数返回它:
def initUI(self):
self.parent.wm_title("Email")
self.parent.config(height = 370, width = 670)
email_entry = Entry(self, exportselection = 0, width = 200).pack()
send_button = Button(self, text = "Send", command = self.send).pack()
self.pack()
return email_entry