91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python中如何使用多線程保持GUI的響應

發布時間:2021-10-11 17:39:50 來源:億速云 閱讀:120 作者:柒染 欄目:大數據

今天就跟大家聊聊有關Python中如何使用多線程保持GUI的響應,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。


改善按鈕對進度欄的控制

我們現在將其改進一下:

  • 第一個按鈕用來啟動進度欄;

  • 第二個按鈕用來停止進度欄;

  • 第三個按鈕用來重置進度欄;

Python中如何使用多線程保持GUI的響應

在之前的MainWindow類中,我們對進度條和按鈕的事件設置三個方法:

Python中如何使用多線程保持GUI的響應

我們將上述三個方法修改一下,改寫成四個方法:

  • start_progressbar(self):用于啟動進度欄

  • stop_progressbar(self):用于停止進度欄

  • reset_progressbar(self):用于重置進度欄

  • update_progressbar(self):用于綁定三個按鈕到上述三個方法上


Python中如何使用多線程保持GUI的響應

運行程序,看看效果:

Python中如何使用多線程保持GUI的響應

當我們點擊“開始”按鈕,進度欄便開始增加,當我們點擊“停止按鈕”,進度欄便停止增加,當我們點擊“重置”按鈕,進度欄便歸零。


控制進度欄增長速度


在啟動進度欄的start_progressbar()方法中,我們通過while循環來增加進度欄,每次增加0.0001,在這樣的情況下,進度欄增長得很快。其實,我們可以通過time模塊的sleep()方法凍結進度欄,以達到降低進度欄增長速度的效果。

修改start_progressbar()方法如下:

Python中如何使用多線程保持GUI的響應

我們讓進度欄的數值增長停歇0.3秒,看看效果:

Python中如何使用多線程保持GUI的響應

進度欄的增長速度確實比之前緩慢了很多。


使用QThread線程


PyQt中QtCore的QThread對象提供了一個獨立于平臺的方式來管理線程。

QThread對象通過調用run()方法來執行線程,默認情況下,run()方法通過調用exec()方法來啟動事件的循環。

下面,我們通過一個進度欄計數器的示例,來演示一下QThread的使用。

我們新建一個繼承自QtCore.QThread的類RunThread(),并在其中定義一個run()方法用來啟動線程,定義一個stop()方法用來停止線程。

Python中如何使用多線程保持GUI的響應

首先,我們通過實例化QtCore.pyqtSignal(int)定義了一個新的信號counter_value,這個值會用來更新進度欄。然后設置了RunThread()類中的一些默認屬性。

在run()方法中,我們通過一個while循環來不斷累加計數器的值,并且將累加的計數器的值通過定義的信號counter_value發送出去。

在stop()方法中,我們設置線程的運行狀態為Fasle,然后使用QThread的terminate()方法確保線程完全的被停止。

然后,要應用這個進度欄計數器,我們還需要在主窗口類MainWindow()中添加和修改一番:

添加一個進度欄計數器方法progressbar_counter(),用來啟動線程管理器:

Python中如何使用多線程保持GUI的響應

添加一個進度欄設置方法set_progressbar(),用來設置進度欄的值:

Python中如何使用多線程保持GUI的響應

修改一下進度欄的啟動方法start_progressbar()。刪除while循環,添加進度欄計數器到其中(因為進度欄計數器中已經實現了while循環增加數值):

Python中如何使用多線程保持GUI的響應

修改進度欄的停止方法stop_progressbar(),添加線程的stop()方法用來停止線程:

Python中如何使用多線程保持GUI的響應

修改完成后,我們運行程序,看看效果:

Python中如何使用多線程保持GUI的響應

通過終端打印出來的信息,我們可以直觀的看到QThread線程的管理控制。

看完上述內容,你們對Python中如何使用多線程保持GUI的響應有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

扶沟县| 沙坪坝区| 龙里县| 金平| 青州市| 潼南县| 江津市| 烟台市| 武冈市| 弋阳县| 瓦房店市| 巴彦县| 和硕县| 唐河县| 临高县| 临清市| 翼城县| 郓城县| 兴仁县| 巢湖市| 东阿县| 隆昌县| 博白县| 彭阳县| 滁州市| 尤溪县| 桑日县| 柞水县| 左权县| 调兵山市| 铅山县| 荣昌县| 瑞昌市| 湖北省| 江都市| 临清市| 怀仁县| 贵定县| 柘荣县| 皮山县| 莲花县|