0

我对 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 变量(最终函数使用该变量)可以从外部访问?换句话说,我希望我的图形在课堂上,而其余的则不是。基本上,我在类中声明了输入框变量,但我想在类之外将它用于发送函数。随后,我希望能够从类内部访问发送按钮的发送功能。这是否涉及使它们全球化……?

此外,这段代码可能不是最好的,我对 python 仍然不是很好。我会随着我的进步而改进它。除了我的主要问题之外,还有关于代码的任何提示吗?

4

2 回答 2

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函数(方法)的局部变量。您希望它成为您的实例的一个字段。

于 2013-05-26T20:03:55.017 回答
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
于 2013-05-26T20:06:06.387 回答