欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python Pyqt5多線程更新UI代碼實例(防止界面卡死)

 更新時間:2021年12月03日 17:23:52   作者:幸福的達哥  
這篇文章通過代碼實例給大家介紹了Python Pyqt5多線程更新UI防止界面卡死的問題,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧

"""
在編寫GUI界面中,通常用會有一些按鈕,點擊后觸發(fā)事件,
比如去下載一個文件或者做一些操作,
這些操作會耗時,如果不能及時結(jié)束,主線程將會阻塞,
這樣界面就會出現(xiàn)未響應(yīng)的狀態(tài),因此必須使用多線程來解決這個問題。
"""

代碼實例

 
from PyQt5.Qt import (QApplication, QWidget, QPushButton,QThread,QMutex,pyqtSignal)
import sys
import time
 
qmut_1 = QMutex() # 創(chuàng)建線程鎖
qmut_2 = QMutex()
qmut_3 = QMutex()
# 繼承QThread
class Thread_1(QThread):  # 線程1
    def __init__(self):
        super().__init__()
 
    def run(self):
        qmut_1.lock() # 加鎖
        values = [1, 2, 3, 4, 5,6,7,8,9,10]
        print("====     Thread_1    ====")
        for i in values:
            print("Thread_1:",i)
            time.sleep(0.5)  # 休眠
        qmut_1.unlock() # 解鎖
 
 
class Thread_2(QThread):  # 線程2
    _signal =pyqtSignal()
    def __init__(self):
        super().__init__()
 
    def run(self):
        # qmut_2.lock()  # 加鎖
        values = ["a", "b", "c", "d", "e","f","g","h","i","j","k"]
        print("====     Thread_2    ====")
        for i in values:
            print("Thread_2:",i)
            time.sleep(0.5)
        # qmut_2.unlock()  # 解鎖
        self._signal.emit()
 
class Thread_3(QThread):  # 線程2
    _signal =pyqtSignal()
    def __init__(self):
        super().__init__()
 
    def run(self):
        qmut_3.lock()  # 加鎖
        values = ["a", "b", "c", "d", "e","f","g","h","i","j","k"]
        print("====     Thread_3    ====")
        for i in values:
            print("Thread_3:",i)
            time.sleep(0.5)
        qmut_3.unlock()  # 解鎖
        self._signal.emit() #執(zhí)行完畢后,釋放信號
 
class Thread_01(QThread):  # 線程1
    def __init__(self):
        super().__init__()
 
    def run(self):
        values = [1, 2, 3, 4, 5]
        print("====     Thread_01       ====")
        for i in values:
            print("Thread_01:",i)
            time.sleep(0.5)  # 休眠
 
class Thread_02(QThread):  # 線程2
    def __init__(self):
        super().__init__()
 
    def run(self):
        values = ["a", "b", "c", "d", "e"]
        print("====     Thread_02       ====")
        for i in values:
            print("Thread_02:",i)
            time.sleep(0.5)
 
 
class MyWin(QWidget):
    def __init__(self):
        super().__init__()
        # 按鈕初始化
        self.btn_01 = QPushButton('按鈕_每點一次運行一次', self)
        self.btn_01.move(80, 40)
        self.btn_01.clicked.connect(self.click_01)  # 綁定槽函數(shù)
 
        self.btn_02 = QPushButton('按鈕_每點一次運行一次', self)
        self.btn_02.move(80, 80)
        self.btn_02.clicked.connect(self.click_02)  # 綁定槽函數(shù)
 
        self.btn_1 = QPushButton('按鈕_線程鎖_多次點擊,依次執(zhí)行(滯后感)', self)
        self.btn_1.move(80, 120)
        self.btn_1.clicked.connect(self.click_1)  # 綁定槽函數(shù)
 
        self.btn_2 = QPushButton('按鈕_線程鎖_收到完成信號后才能再次點擊', self)
        self.btn_2.move(80, 160)
        self.btn_2.clicked.connect(self.click_2)  # 綁定槽函數(shù)
 
        self.btn_3 = QPushButton('按鈕_線程鎖_收到完成信號后再次執(zhí)行', self)
        self.btn_3.move(80, 200)
        self.btn_3.clicked.connect(self.click_3)  # 綁定槽函數(shù)
 
    def click_01(self):
        self.thread_01 = Thread_01()  # 創(chuàng)建線程
        self.thread_01.start()  # 開始線程
    def click_02(self):
        self.thread_02 = Thread_02()  # 創(chuàng)建線程
        self.thread_02.start()  # 開始線程
 
    def click_1(self):
        self.thread_1 = Thread_1()  # 創(chuàng)建線程
        self.thread_1.start()  # 開始線程
 
    def click_2(self):
        self.btn_2.setEnabled(False)
        self.thread_2 = Thread_2()
        self.thread_2._signal.connect(self.set_btn_2) #信號連接,如果收到信號,就執(zhí)行對應(yīng)的函數(shù)
        self.thread_2.start()
 
    def click_3(self):
        self.btn_3.setEnabled(False)
        self.thread_3 = Thread_3()
        self.thread_3._signal.connect(self.set_btn_3) #信號連接,如果收到信號,就執(zhí)行對應(yīng)的函數(shù)
        self.thread_3.start()
 
    def set_btn_2(self):
        self.btn_2.setEnabled(True)
 
    def set_btn_3(self):
        self.btn_3.setEnabled(True)
 
 
if __name__ == "__main__":
    app = QApplication(sys.argv)
    myshow = MyWin()
    myshow.setWindowTitle("多線程演示")
    myshow.setMinimumHeight(500)
    myshow.setMinimumWidth(500)
    myshow.show()
    sys.exit(app.exec_())

運行結(jié)果

====? ? ?Thread_01? ? ? ?====

Thread_01: 1

Thread_01: 2

Thread_01: 3

Thread_01: 4

Thread_01: 5

====? ? ?Thread_02? ? ? ?====

Thread_02: a

Thread_02: b

Thread_02: c

Thread_02: d

Thread_02: e

====? ? ?Thread_1? ? ====

Thread_1: 1

Thread_1: 2

Thread_1: 3

Thread_1: 4

Thread_1: 5

Thread_1: 6

Thread_1: 7

Thread_1: 8

Thread_1: 9

====? ? ?Thread_2? ? ====

Thread_2: a

Thread_1: 10

Thread_2: b

Thread_2: c

Thread_2: d

====? ? ?Thread_3? ? ====

Thread_3: a

Thread_2: e

Thread_3: b

Thread_2: f

Thread_3: c

Thread_2: g

Thread_3: d

Thread_2: h

Thread_3: e

Thread_2: i

Thread_3: f

Thread_2: j

Thread_3: g

Thread_2: k

Thread_3: h

運行過程

到此這篇關(guān)于Python Pyqt5多線程更新UI代碼實例(防止界面卡死)的文章就介紹到這了,更多相關(guān)Python Pyqt5多線程更新U內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python使用Pandas對csv文件進行數(shù)據(jù)處理的方法

    Python使用Pandas對csv文件進行數(shù)據(jù)處理的方法

    這篇文章主要介紹了Python使用Pandas對csv文件進行數(shù)據(jù)處理的方法,本文通過實例代碼相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-08-08
  • Python和JS反爬之解決反爬參數(shù)?signKey

    Python和JS反爬之解決反爬參數(shù)?signKey

    這篇文章主要介紹了Python和JS反爬之解決反爬參數(shù)?signKey,Python?反爬中有一大類,叫做字體反爬,核心的理論就是通過字體文件或者?CSS?偏移,接下來文章的詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05
  • 詳解向scrapy中的spider傳遞參數(shù)的幾種方法(2種)

    詳解向scrapy中的spider傳遞參數(shù)的幾種方法(2種)

    這篇文章主要介紹了詳解向scrapy中的spider傳遞參數(shù)的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • python pygame入門教程

    python pygame入門教程

    pygame是python的游戲編程模塊,今天我們就來一起簡單的學(xué)習(xí)如何使用該模塊
    2021-06-06
  • Python NumPy中diag函數(shù)的使用說明

    Python NumPy中diag函數(shù)的使用說明

    這篇文章主要介紹了Python NumPy中diag函數(shù)的使用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • PHPMyAdmin及權(quán)限配置

    PHPMyAdmin及權(quán)限配置

    這篇文章主要介紹了PHPMyAdmin及權(quán)限配置,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2014-08-08
  • PowerShell的基本使用方法

    PowerShell的基本使用方法

    本文主要介紹了PowerShell的基本使用方法,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • python快速建立超簡單的web服務(wù)器的實現(xiàn)方法

    python快速建立超簡單的web服務(wù)器的實現(xiàn)方法

    某些條件測試,需要一個簡單的web服務(wù)器測試一下,為此專門去配置個nginx 或者 apache服務(wù)器略顯麻煩,這里就為大家介紹一下使用python快速建立超簡單的web服務(wù)器的方法,需要的朋友可以參考下
    2018-02-02
  • Django ContentType組件詳解

    Django ContentType組件詳解

    這篇文章主要為大家介紹了Django ContentType組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • Python argparse模塊實現(xiàn)解析命令行參數(shù)方法詳解

    Python argparse模塊實現(xiàn)解析命令行參數(shù)方法詳解

    argparse 是 python 自帶的命令行參數(shù)解析包,可以用來方便的服務(wù)命令行參數(shù)。本文將通過示例和大家詳細(xì)講講argparse的使用,需要的可以參考一下
    2022-09-09

最新評論