簡體   English   中英

如何從類中訪問變量和函數?

[英]How to access variables and functions from within a class?

我對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仍然不是很好。 隨着我的進展,我會改進它。 關於代碼的任何提示,除了我的主要問題?

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函數(方法)的局部變量。 您希望它是您的實例的字段。

最簡單的可能是讓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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM