2013-12-12 57 views
1

我正在嘗試使用Python和PyGTK編寫WiFi管理接口。獲取接口在PyGTK中阻止

用戶看到gtk.TreeView中的可用網絡列表。然後他/她可以通過點擊一個按鈕來重新掃描無線網絡。無論出於何種原因,重新掃描的過程很快就是。事實上,這很快,即使網絡列表確實正在重新掃描,點擊按鈕也沒有發生。

我希望做的是添加一對的延遲秒,其中的接口模塊和I顯示gtk.Spinner使用戶看到我用來顯示網絡列表中gtk.TreeView被清除並重新填充。

顯然,time.sleep()不是正確的方法。有沒有這樣做的優雅方式?

回答

3

關於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循環。

+0

LOC是什麼意思? –

+0

loc =代碼行 –

+0

雖然這個答案解決了我的問題,但它並沒有按照我的要求阻止接口。 –