python - 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()
解决方案
只需删除 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()
推荐阅读
- javascript - Regular Expression to allow a specific word and number
- d3.js - d3.json() 没有从 JSON 文件中获取数据
- xml - 在 XSL 中选择特定的 XML 元素作为表头(th)
- css - 如何在 wix 网站中设置响应式字体大小
- sql-server - SQL 子查询 - 子组汇总后的 Max() SUM()
- python - \n 在我调用函数时不在数组内部工作
- selenium - 使用 selenium python 处理弹出窗口
- python - 制作课程,放入字典然后放入列表
- java - 更改 RecyclerView android Kotlin 上仅选定项目的文本颜色
- c# - MS DI how to configure services using information known only at runtime