我正在嘗試通過實例化從另一個類訪問 tkinter 文本小部件,但是在從外部類調(diào)用時它不會被修改,但在類內(nèi)部調(diào)用該方法時工作正常。我也嘗試過@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)并像這樣調(diào)用方法self.displayclass.setText(self.text)我在調(diào)試中注意到,當從類外部調(diào)用時,方法內(nèi)部text變量的值被完美地傳遞(例如,正確傳遞為)。但是插入不起作用。self.texttext編輯:“不工作”我的意思是,它根本不插入任何東西。抱歉不清楚。
1 回答

海綿寶寶撒
TA貢獻1809條經(jīng)驗 獲得超8個贊
簡而言之,要在對象上調(diào)用函數(shù),您必須具有對該對象實例的引用。這是面向?qū)ο缶幊痰囊粋€基本方面。
您不一定必須使用全局變量。您可以,也可以將其作為屬性存儲在其他對象上。
這是一個有效的最小示例:
if __name__ == "__main__":
mainapp = tk.Tk()
displayclass = TextDisplay(mainapp)
displayclass.grid(column = 5, row = 0, sticky = 'news')
displayclass.setText("hello, world")
mainapp.mainloop()
添加回答
舉報
0/150
提交
取消