首页 > 解决方案 > While 循环干扰 tkinter 中的“之后”

问题描述

下面的代码依次从列表中获取每个项目,打印其名称并更改框架的颜色属性。这一切都有效,但它会立即发生,而不是每隔 1000 毫秒发生一次。用'after'使用while循环不是吗?

import tkinter as tk

list= ['red','green','orange','thistle','yellow']

items= (i for i in list)

def alt_colour():
    while True:                     
        try:

            item=next(items)
            print(f'item is {item}')        
            frame['bg']=item
            frame.after(1000,alt_colour)
        except StopIteration:
            #list exhausted
            break   


root=tk.Tk()
frame=tk.Frame(root,width=200,height=100,bg='blue')
frame.pack()

btn=tk.Button(root,command=alt_colour,text='Change Colour')
btn.pack()
root.mainloop()

标签: pythontkinter

解决方案


只需删除 while 循环:

import tkinter as tk

list= ['red','green','orange','thistle','yellow']

items= (i for i in list)

def alt_colour():                 
    try:
        item=next(items)
        print(f'item is {item}')        
        frame['bg']=item
        frame.after(1000,alt_colour)
    except StopIteration:
        #list exhausted
        pass


root=tk.Tk()
frame=tk.Frame(root,width=200,height=100,bg='blue')
frame.pack()

btn=tk.Button(root,command=alt_colour,text='Change Colour')
btn.pack()
root.mainloop()

推荐阅读