Python 如何查看插入文本框的不断更新变量的更改

Python 如何查看插入文本框的不断更新变量的更改,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,因此,我想创建一个文本框,允许我显示不断更新的消息。但是,对于我下面的代码,它只显示变量msg中的第一条加载的消息。我怎样才能解决这个问题 import tkinter import threading import time global msg def gui(): root = tkinter.Tk() box = tkinter.Text(width=90, height=30, font=("Lucida Console", 10))

因此,我想创建一个文本框,允许我显示不断更新的消息。但是,对于我下面的代码,它只显示变量msg中的第一条加载的消息。我怎样才能解决这个问题

import tkinter
import threading
import time

global msg

def gui():
    root = tkinter.Tk()

    box = tkinter.Text(width=90, height=30, font=("Lucida Console", 10))
    box.pack(pady=20)
    box.insert(tkinter.END, msg) #this updated msg should be shown

    box.configure(state=tkinter.DISABLED)
    root.mainloop()

def loop():
    global msg
    for x in range(100):
        msg = str(x)
        time.sleep(1)

if __name__ == '__main__':
    p1 = threading.Thread(target=gui)
    p2 = threading.Thread(target=loop)

    p1.start()
    p2.start()
  • 文本
    小部件的配置被禁用时,您无法更改文本
  • 在您的代码中,
    insert(tkinter.END,msg)
    只会插入文本一次。您可以使用
    .after
    每次插入文本。(如果您不想在
    中使用insert方法。
    之后,您可以为
    绑定
    StringVar
  • 要解决这些问题,请尝试以下操作:

    import tkinter
    import threading
    import time
    global msg
    
    def gui():
        def insert():
            global msg
            box.configure(state=tkinter.NORMAL)
            box.insert(tkinter.END, msg)
            box.configure(state=tkinter.DISABLED)
            root.after(1000, insert)
    
        root = tkinter.Tk()
    
        box = tkinter.Text(width=90, height=30, font=("Lucida Console", 10))
        box.pack(pady=20)
        insert()
    
        root.mainloop()
    
    def loop():
        global msg
        for x in range(100):
            msg = str(x)
            time.sleep(1)
    
    if __name__ == '__main__':
        p1 = threading.Thread(target=gui)
        p2 = threading.Thread(target=loop)
    
        p1.start()
        p2.start()
    
    < >我不建议您使用全局变量<代码> MSG。您可以考虑使用线程队列。