我正在尝试使用Python编写一个WiFi管理接口。
用户在gtk.TreeView中看到可用网络的列表。然后,他可以选择通过单击一个按钮重新扫描无线网络。无论出于什么原因,重装过程都是非常快速的。事实上,点击按钮的速度太快了,感觉好像什么都没发生过,尽管网络列表确实被重新屏蔽了。
我想要做的是添加几秒钟的延迟,其中接口块和我显示一个gtk.Spinner,这样用户就可以看到我用来显示网络列表的gtk.TreeView被清除并重新填充。
显然,time.sleep()不是正确的方法。有一种优雅的方法吗?
发布于 2013-12-12 10:26:56
关于LOC,我能想出的最短答案是:
from threading import Thread
import gobject
gobject.threads_init()
time_to_wait = 2.0 # time in seconds
nonblocking_wait = Thread(target=sleep, args=(timetowait,))
nonblocking_wait.start()
while nonblocking_wait.is_alive():
nonblocking_wait.join(.05)
gtk.main_iteration_do(True) # blocks if no event is pending第二次,我意识到,对一些读者来说,睡眠线程的相关性可能是模糊的。它的目的是建立time_to_wait + 0.05秒(+开销)的最大时间限制!您可以使用计数器或类似的方法来完成这个任务,但是这样可以防止cpu在空闲循环中产生无用的负载。
这样,gtk仍然可以处理绘图更新。
任何进度条更新或任何东西都必须放置到while循环中。
https://stackoverflow.com/questions/20540244
复制相似问题