Gavin_Stargazer
2021-07-07 10:09
采纳率: 83.3%
浏览 72
已结题

【python】封装为类的tkinter,怎么在类外把信息写到Tkinter的text控件中

封装为类的tkinter,怎么在类外把信息写到Tkinter的text控件中

import tkinter as tk
from tkinter import scrolledtext


class App:
    def __init__(self, window):
        self.window = window
        self.window.title("main")
        self.window.geometry("600x300")
        self.labelframe()
        self.text_insert()

    def labelframe(self):
        lf = tk.LabelFrame(
            self.window, text="运行信息", font=("微软雅黑", 10, "bold"), padx=10, pady=10
        )
        lf.place(x=20, y=20)

        text = scrolledtext.ScrolledText(lf, height=5, width=65, font=("微软雅黑", 10))
        text.grid()

        self.text = text

    def text_insert(self):
        self.text.insert("end", "Part_1:这是类内写入的信息... \n")


# 怎么在类外把信息写到Tkinter的text控件中
message = "Part_2:这条信息,在类外写入Tkinter text控件"


root = tk.Tk()
app = App(root)
root.mainloop()
  • 收藏

2条回答 默认 最新

  • soar3033 2021-07-07 10:15
    已采纳
    import tkinter as tk
    from tkinter import scrolledtext
     
    class App:
        def __init__(self, window):
            self.window = window
            self.window.title("main")
            self.window.geometry("600x300")
            self.labelframe()
            self.text_insert()
        def labelframe(self):
            lf = tk.LabelFrame(
                self.window, text="运行信息", font=("微软雅黑", 10, "bold"), padx=10, pady=10
            )
            lf.place(x=20, y=20)
            text = scrolledtext.ScrolledText(lf, height=5, width=65, font=("微软雅黑", 10))
            text.grid()
            self.text = text
        def text_insert(self):
            self.text.insert("end", "Part_1:这是类内写入的信息... \n")
    
        def change(self,txt):
            self.text.insert("end",txt)
     
    # 怎么在类外把信息写到Tkinter的text控件中
    message = "Part_2:这条信息,在类外写入Tkinter text控件"
     
    root = tk.Tk()
    app = App(root)
    app.change(message)
    root.mainloop()
    
    

    img

    打赏 评论
  • 宁缺灬 2021-07-07 10:32

    18行已经提供了对象指针了。。。直接在root.mainloop前加
    app.text.insert("end",message)
    就可以了。。。

    img
    考虑到界面刷新,如果里面有10个文本,总不能写10个change方法吧。。。不美观且重复代码也多。
    可以理解为self.text = text为常规包装类时候声明的全局对象。。
    当然这里没有public private protected的说法。仅仅只是局部对象和全局对象的区别,如果不写这个,类内其他方法也访问不到这个对象。

    1 打赏 评论

相关推荐 更多相似问题