Python 在PyGTK中获取要阻止的接口
我正在尝试使用Python和PyGTK编写WiFi管理界面 用户在Python 在PyGTK中获取要阻止的接口,python,pygtk,Python,Pygtk,我正在尝试使用Python和PyGTK编写WiFi管理界面 用户在gtk.TreeView中看到可用网络的列表。然后,他/她可以通过单击按钮重新扫描无线网络。无论出于何种原因,重新扫描过程都非常快。事实上,它是如此之快,以至于在点击按钮时感觉什么都没有发生,即使网络列表确实正在重新扫描 我想做的是增加几秒钟的延迟,接口阻塞,我显示一个gtk.Spinner,以便用户看到我用来显示网络列表的gtk.TreeView被清除并重新填充 显然,time.sleep()不是正确的方法。有没有一种优雅的方法
gtk.TreeView
中看到可用网络的列表。然后,他/她可以通过单击按钮重新扫描无线网络。无论出于何种原因,重新扫描过程都非常快。事实上,它是如此之快,以至于在点击按钮时感觉什么都没有发生,即使网络列表确实正在重新扫描
我想做的是增加几秒钟的延迟,接口阻塞,我显示一个gtk.Spinner
,以便用户看到我用来显示网络列表的gtk.TreeView
被清除并重新填充
显然,
time.sleep()
不是正确的方法。有没有一种优雅的方法可以做到这一点?关于我能想到的最短答案:
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
再看一眼,我意识到,对于一些读者来说,睡眠线索的相关性可能是模糊的。它的目的是建立一个最大时间限制,即等待时间秒(+/code>+0.05秒(+/code>开销)!您可以使用计数器或类似的方法来实现这一点,但这样可以防止空闲循环中cpu上的无用负载
这样gtk仍然可以处理绘图更新
任何progressbar更新或任何内容都必须放入while循环。虽然此答案解决了我的问题,但它不会按照我的要求阻止界面。如果要阻止用户执行任何操作,可以在进入while循环之前使用gobject.signal\u handlers\u block\u by\u func
,不妨碍重新绘制您的应用程序。