我是Python的新手。我在Ubuntu 18.04 LTS上使用版本3.6.7。 下面的代码只是一个较大脚本的示例测试,我想编写该脚本来模拟一系列LED,这些LED可以接受字节类型值并在输出状态下反映它们。我选择使用Tkinter和Canvas小部件对象来显示和更新LED状态。我遇到的问题是我想在LED更改状态之前引入延迟(在这种情况下,该状态从关闭变为打开)。
当我运行此代码时,实际上发生的是预期的延迟发生在tkinter窗口,画布小部件和LED出现之前。当所有内容最终出现时,LED已经处于其最终状态(点亮),因此甚至没有显示OFF状态(或者过快)。我怎样才能首先使窗口,画布和OFF LED显示屏显示出来,然后有2秒钟的延迟,最后如何将LED的状态从OFF变为ON?谢谢。
# LED simulation using tkinter canvas widget
from tkinter import *
import time
root = Tk()
root.geometry('800x600')
root.title('LED Simulation')
canvas = Canvas(width=640, height=480)
canvas.pack()
# create an LED object in the OFF state (dark red filled circle)
d7 = canvas.create_oval(50, 50, 100, 100, fill='dark red')
# wait in this OFF state for 2 secs
time.sleep(2)
# change the LED state from OFF to ON (light red filled circle)
canvas.itemconfig(d7, fill='light red')
# is this even needed?
canvas.update()
root.mainloop()
答案 0 :(得分:1)
Sleep()
将暂停主循环,这意味着将不进行任何更新。尝试改用after()
:
# LED simulation using tkinter canvas widget
from tkinter import *
root = Tk()
root.geometry('800x600')
root.title('LED Simulation')
canvas = Canvas(width=640, height=480)
canvas.pack()
# create an LED object in the OFF state (dark red filled circle)
d7 = canvas.create_oval(50, 50, 100, 100, fill='dark red')
# change the LED state from OFF to ON (light red filled circle)
def change_color():
canvas.itemconfig(d7, fill='green')
# wait in this OFF state for 2 secs
root.after(1000, change_color) # Run after 1000 milliseconds
root.mainloop()
将“打开”颜色更改为“绿色”,因为我的Python找不到“浅红色”颜色。