天天看點

PyQt5 筆記(04):主視窗卡死問題

本文基于:windows 7 + python 3.4

知識點:

 1. 将 time.sleep 替換為 QTimer

 2. 将 time.sleep 放入到 QThread

 3. 使用 QThread 自己的 sleep 方法

我們希望實作一個這樣的小程式:

PyQt5 筆記(04):主視窗卡死問題

當點選開始按鈕的時候,下面的文本标簽每隔一秒自動加1。

<a></a>

看起來沒有任何邏輯上的錯誤。

那就運作一下看看,點選按鈕。。。神馬情況?主界面卡死了!如圖

PyQt5 筆記(04):主視窗卡死問題

我猜測這可能與python的GIL問題有關:

  1. time庫是純python的,而PyQt的背後是Qt,這是純C++的。

  2. 換句話說,就是time.sleep(1)時,并沒有将CPU控制權交還給Qt,進而造成界面卡死

解決這個問題,既然不能用 python 的 time 庫,那就用 PyQt 自己的 QTimer 類

再運作一下。。。 OK,搞定!如圖:

PyQt5 筆記(04):主視窗卡死問題

解決這個問題的另外一個思路:開一個線程,專門用于計時(即:專門運作 time.sleep)

在 QThread 中使用 time.sleep 和 for 循環,無壓力!

當然,線程與主視窗的通信使用了信号/槽。

PyQt5 筆記(04):主視窗卡死問題

代碼如下:

PyQt5 筆記(04):主視窗卡死問題

本文轉自羅兵部落格園部落格,原文連結:http://www.cnblogs.com/hhh5460/p/5175322.html,如需轉載請自行聯系原作者