簡體   English   中英

如何在tkinter中另一個班級的文本小部件中插入文本?

[英]How can I insert text in a text widget from another class in tkinter?

我正在嘗試通過實例化從另一個類訪問tkinter文本小部件,但是當從外部類調用時不會對其進行修改,但是在內部類中調用該方法時效果很好。

我也嘗試過@staticmethod,盡管這似乎也不起作用。 我還是更喜歡使用該類的實例對象。

所以這是主要的:

if __name__ == "__main__":
    mainapp = tk.Tk()
    mainapp.title("Automatic Proofreader")
    mainapp.configure(background = "gray")
    mainapp.resizable(width = False, height = False)
    Core(mainapp).grid(column = 0, row = 0, sticky = 'news')
    TextDisplay(mainapp).grid(column = 5, row = 0, sticky = 'news')
    mainapp.mainloop()

這是我需要訪問的類和方法:

class TextDisplay(tk.Frame):

    def setText(self, text):
        self.displayout.config(state = "normal")
        self.displayout.delete(1.0, tk.END)
        #This inserts nothing when called from outside class
        self.displayout.insert(tk.INSERT, text)
        #But it inserts the correct text when called from this same class
        self.displayout.config(state = "disabled")

    def __init__(self, parent, *args, **kwargs):
        tk.Frame.__init__(self, parent, *args, **kwargs)
        verticalscroll = tk.Scrollbar(self)

        self.displayout = tk.Text(self, font = ('comic sans', 20, 'bold'), height = 20, width = 40, bg = "gray", wrap = tk.WORD, yscrollcommand = verticalscroll.set, state= "disabled")
        self.displayout.grid(columnspan = 4)

        verticalscroll.grid(column = 5, sticky = 'ns')
        verticalscroll.config(command = self.displayout.yview)

我首先將此實例self.displayclass = TextDisplay(mainapp)另一個類,例如self.displayclass = TextDisplay(mainapp)

並像這樣調用方法self.displayclass.setText(self.text)

我在調試中注意到,從類外部調用時,方法內部text變量的值可以完美傳遞(例如self.text被正確地傳遞為text )。 但是插入不起作用。

編輯:“不工作”我的意思是,它根本不插入任何內容。 抱歉,不清楚。

簡而言之,要在對象上調用函數,必須具有對該對象實例的引用。 這是面向對象編程的基本方面。

您不必一定要使用全局變量。 您可以或者可以將其作為屬性存儲在其他對象上。

這是一個可行的最小示例:

if __name__ == "__main__":
    mainapp = tk.Tk()
    displayclass = TextDisplay(mainapp)
    displayclass.grid(column = 5, row = 0, sticky = 'news')

    displayclass.setText("hello, world")
    mainapp.mainloop()

暫無
暫無

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

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