首页 > 解决方案 > Tkinter 不断崩溃:在循环中更新标签 (StringVar())

问题描述

我在创建可自行更新的标签时遇到问题。while使用循环后,我的 Tkinter 窗口崩溃。就我而言,我不会创建多个标签并将它们堆叠在一起,这会导致程序崩溃而不是更新标签。我能做些什么更好?先感谢您!!

带循环:

def testfunction():
    
    while True :
        f = open("exchange.txt", "r")
        insert = f.read()
        f.close()

        if insert != var:
    
            var.set(insert)
        
      
root = Tk()
var = StringVar()
var.set("start")

root.geometry("1920x150+-10+-35")

frame_main = Frame(root, bg="black")
frame_main.place(relwidth=1, relheight=1, relx=0, rely=0)

label = Label(root,width=10,textvariable=var, font='Helvetica 14 bold',bg="black", fg="yellow")

label.place(relwidth=0.9, relheight=0.9, relx=0.05, rely=0.1)

root.after(200, testfunction)

root.mainloop()

重要编辑: 当我通过这个脚本打开它时,这一切都发生了。

# writes down:
subprocess.Popen("python -i tkinter_samentha_tricks.py")
while True:

    r = random.randint(1,6)
    f = open("exchange.txt", "w+")
    if r==1 or r==2:
    f.write("1 or 2")
    f.close
    print(r)

标签: python-3.xloopstkintercrashlabel

解决方案


使用 while 循环将阻止 tkinter 更新小部件,请after()改用:

def testfunction():
    try:
        with open("exchange.txt", "r") as f:
            insert = f.read()
            if insert != var.get():
                var.set(insert)
    except FileNotFoundError:
        #print('file not found')
        pass
    root.after(100, testfunction)

推荐阅读