python - 在 PyGTK 中获取要阻止的接口(interface)

标签 python pygtk

我正在尝试使用Python和PyGTK编写一个WiFi管理界面。

用户在 gtk.TreeView 中看到可用网络的列表。然后,她/他可以选择通过单击按钮重新扫描无线网络。无论出于何种原因,重新扫描过程确实很快。事实上,速度如此之快,以至于点击按钮时感觉什么也没有发生,尽管网络列表确实正在重新扫描。

我想要做的是添加几秒钟的延迟,其中界面会阻塞并显示一个 gtk.Spinner 以便用户看到我用来显示网络列表的 gtk.TreeView 已被清除并重新填充。

显然,time.sleep() 不是正确的方法。有没有一种优雅的方法来做到这一点?

最佳答案

关于 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

再看一眼,我意识到,对于某些读者来说, sleep 线程的相关性可能很模糊。其目的是建立 time_to_wait + 0.05 秒(+ 开销)的最大时间限制!您可以使用计数器或类似的方法来完成此操作,但这样可以防止空闲循环中 CPU 上的无用负载。

这样 gtk 仍然可以处理绘制更新。

任何进度条更新或任何内容都必须放入 while 循环中。

关于python - 在 PyGTK 中获取要阻止的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20540244/

相关文章:

python - PyGTK 主循环的阻塞行为

python - 如何更改 gtk.Assistant 上的内置按钮标签?

Python/MySQL 编程错误 : 1054 (42S22): Unknown column 'd' in 'field list'

python - Python list += iterable 的行为是否记录在任何地方?

python 与 R 作用域

python - 有没有办法可视化 3D 笛卡尔空间的方位角平均值?

python - WebDriverException : Message: Service chromedriver unexpectedly exited. 状态代码为:127

python - 如何避免Python中Gtk.Dialog关闭?

python - PyGTK:访问 gtk.MessageDialog 中的按钮?

python - 套接字线程和 PyGTK