2013-04-10 32 views
0

我有一個PySide應用程序,它將一些按鈕連接到一個函數調用,該函數調用可以關閉一堆外部進程(這不是理想的,但它是必需的)。防止PySide湮沒Python

函數調用的運行時間不到四分之一秒,但它仍然有可能導致用戶超出我的代碼,導致滯後,凍結或崩潰。

這使我幾個問題...

  1. 究竟意味着什麼的調用將被連接到信號?假設按鈕A的點擊信號連接了一個Python函數f。如果單擊了A,然後在f退出前再次單擊,PySide是否會將另一個呼叫排隊等候給f,還是會更有趣?

  2. 一個可能的解決方案是使f從信號斷開連接,然後在退出之前重新連接。在我嘗試重寫這些東西之前,有沒有人知道這是否有效,或者是否有更優雅的解決方案?

回答

0

我猜測它確實是每個其他GUI工具包所做的,它試圖爲每個按鈕執行該功能。如果你不希望出現這種情況,那麼有幾種方法可以採取:

  1. 禁用按鈕,直到函數完成
  2. 使用警戒值,如self.running,並添加一個檢查,看是否這是真的。如果是這樣,返回。否則,將其設置爲True並執行。不過,別忘了從信號

這些是主要的設置回爲False在功能

  • 年底做你所提到的,斷開的功能。儘管如此,我確信還有更深奧的解決方案。