如何在tkinter中的另一个类的文本小部件中插入文本?

2024-10-02 12:37:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图通过实例从另一个类访问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)

我首先在另一个类中引用它,比如so self.displayclass = TextDisplay(mainapp)

并调用类似soself.displayclass.setText(self.text)的方法

我在调试中注意到,text变量方法内部的值在从类外部调用时被完美地传递(例如self.text被正确地传递为text)。但插入不起作用。你知道吗

编辑:我说的“不工作”是指,它根本不插入任何内容。抱歉说不清楚。你知道吗


Tags: 实例方法textselfconfigcolumntkclass
1条回答
网友
1楼 · 发布于 2024-10-02 12:37:45

简而言之,要调用对象上的函数,必须有对该对象实例的引用。这是面向对象编程的一个基本方面。你知道吗

您不必使用全局变量。可以,也可以将其作为属性存储在其他对象上。你知道吗

下面是一个最简单的例子:

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

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

相关问题 更多 >

    热门问题