最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PyQt界面阻塞卡死問題的解決

 更新時間:2024年01月03日 09:15:48   作者:機(jī)器人邁克貓  
當(dāng)用PyQt5開發(fā)一個GUI界面 ,需要執(zhí)行業(yè)務(wù)邏輯時,后臺邏輯執(zhí)行時間長,界面就容易出現(xiàn)卡死、未響應(yīng)等問題,本文主要介紹了PyQt界面阻塞卡死問題的解決

任何同學(xué)在使用類似PyQt(或者C#開發(fā)winform,WPF)開發(fā)帶界面的軟件的剛開始階段,都會碰到界面卡死軟件崩潰的問題。

就比如以下這段代碼

import sys

from PyQt5.Qt import *

import time


class Window(QWidget):

    def __init__(self):
        super().__init__()  
        self.setWindowTitle("更新界面案例")
        self.resize(300, 200)
        self.move(400, 250)

    def setup_ui(self):
        self.label = QLabel(self)
        self.label.setText("當(dāng)前人數(shù): 100")
        self.label.move(100, 50)

        self.btn1=QPushButton(self)
        self.btn1.setText("按鈕1")
        self.btn1.move(50,125)
        self.btn1.clicked.connect(self.btn1_method)

        self.btn2=QPushButton(self)
        self.btn2.setText("按鈕2")
        self.btn2.move(165,125)
    

    def btn1_method(self):
        
        # 以下為一通耗時操作,比如查詢數(shù)據(jù)庫
        time.sleep(10)

        #根據(jù)上面邏輯操作的結(jié)果,更新界面
        self.label.setText("當(dāng)前人數(shù): 200")
        

if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = Window()  
    window.setup_ui() 
    window.show()  

    sys.exit(app.exec_())

運(yùn)行之后,點擊按鈕1,會發(fā)現(xiàn)界面卡死了,有的人著急再點擊幾下界面,軟件就直接芭比Q了。

 造成這個現(xiàn)象的原因是,本來軟件界面是一直占著主進(jìn)程的,點擊按鈕之后,如果按鈕執(zhí)行的是長時間的操作,這個操作就把主進(jìn)程占住不放了,沒有進(jìn)程來處理軟件界面,這個時候界面就會卡死。

所以解決問題的思路就是主進(jìn)程還是給軟件界面,把按鈕耗時的工作交給線程去處理,方法有很多,這里用PyQt中的QThread舉例

class btn2Thread(QThread):

    def __init__(self):
        super(btn2Thread,self).__init__()

    def run(self):

        # 以下為一通邏輯操作,比如查詢數(shù)據(jù)庫
        time.sleep(10)
        
        # 更新主界面,但是在QThread里找不到主界面的控件

但是這里又會出現(xiàn)一個問題,在執(zhí)行完復(fù)雜操作去更新界面的時候,發(fā)現(xiàn)在QThread找不到主界面的控件,就不能更新主界面了。

解決方法是,在線程里找不到主界面的控件,在主界面的進(jìn)程里我們是可以找到控件的,那我們就把線程處理完的結(jié)果通過信號發(fā)送到主界面的進(jìn)程,主界面在接收到這個消息后,根據(jù)接收到的消息更新主界面

class btn2Thread(QThread):
    # 聲明一個信號
    update_ui_signal=pyqtSignal(str)

    def __init__(self):
        super(btn2Thread,self).__init__()

    def run(self):

        # 以下為一通邏輯操作,比如查詢數(shù)據(jù)庫
        time.sleep(10)

        # 根據(jù)查詢數(shù)據(jù)庫的結(jié)果,比如查詢到200,發(fā)送信號
        self.update_ui_signal.emit((str(200)))

至此解決了界面卡死的問題,以下為完整代碼

import sys

from PyQt5.Qt import *

import time

class btn2Thread(QThread):
    # 聲明一個信號
    update_ui_signal=pyqtSignal(str)

    def __init__(self):
        super(btn2Thread,self).__init__()

    def run(self):

        # 以下為一通邏輯操作,比如查詢數(shù)據(jù)庫
        time.sleep(10)

        # 根據(jù)查詢數(shù)據(jù)庫的結(jié)果,比如查詢到200,發(fā)送信號
        self.update_ui_signal.emit((str(200)))

class Window(QWidget):

    def __init__(self):
        super().__init__()  
        self.setWindowTitle("更新界面案例")
        self.resize(300, 200)
        self.move(400, 250)

    def setup_ui(self):
        self.label = QLabel(self)
        self.label.setText("當(dāng)前人數(shù): 100")
        self.label.move(100, 50)

        self.btn1=QPushButton(self)
        self.btn1.setText("按鈕1")
        self.btn1.move(50,125)
        self.btn1.clicked.connect(self.btn1_method)

        self.btn2=QPushButton(self)
        self.btn2.setText("按鈕2")
        self.btn2.move(165,125)
        self.btn2.clicked.connect(self.btn2_method)

    def btn1_method(self):
        
        # 以下為一通邏輯操作
        time.sleep(10)

        #根據(jù)上面邏輯操作的結(jié)果,更新界面
        self.label.setText("當(dāng)前人數(shù): 200")
        

    def btn2_method(self):
        self.btn2Thread_object=btn2Thread()
        self.btn2Thread_object.start()
        self.btn2Thread_object.update_ui_signal.connect(self.update_label)

    def update_label(self,str1):
        self.label.setText("當(dāng)前人數(shù): %s"%(str1))




if __name__ == "__main__":
    app = QApplication(sys.argv)

    window = Window()  
    window.setup_ui() 
    window.show()  

    sys.exit(app.exec_())

到此這篇關(guān)于PyQt界面阻塞卡死問題的解決的文章就介紹到這了,更多相關(guān)PyQt界面阻塞卡死內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家! 

相關(guān)文章

  • NumPy random.choice()函數(shù)的使用小結(jié)

    NumPy random.choice()函數(shù)的使用小結(jié)

    隨機(jī)采樣 是一個非常常見的操作,NumPy提供的numpy.random.choice() 函數(shù)讓我們可以方便地從數(shù)組或序列中隨機(jī)選取元素,本文將帶深入介紹 numpy.random.choice() 的功能及常見實戰(zhàn)案例,感興趣的可以了解一下
    2026-01-01
  • 利用python修改json文件的value方法

    利用python修改json文件的value方法

    今天小編就為大家分享一篇利用python修改json文件的value方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python導(dǎo)包的幾種方法(自定義包的生成以及導(dǎo)入詳解)

    python導(dǎo)包的幾種方法(自定義包的生成以及導(dǎo)入詳解)

    這篇文章主要介紹了python導(dǎo)包的幾種方法(自定義包的生成以及導(dǎo)入詳解),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 解決Python傳遞中文參數(shù)的問題

    解決Python傳遞中文參數(shù)的問題

    這篇文章主要介紹了解決Python傳遞中文參數(shù)的問題的相關(guān)資料,需要的朋友可以參考下
    2015-08-08
  • PyTorch之nn.ReLU與F.ReLU的區(qū)別介紹

    PyTorch之nn.ReLU與F.ReLU的區(qū)別介紹

    這篇文章主要介紹了PyTorch之nn.ReLU與F.ReLU的區(qū)別介紹,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python scrapy重復(fù)執(zhí)行實現(xiàn)代碼詳解

    python scrapy重復(fù)執(zhí)行實現(xiàn)代碼詳解

    這篇文章主要介紹了python scrapy重復(fù)執(zhí)行實現(xiàn)代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-12-12
  • 從入門到精通:玩轉(zhuǎn)Python?Fire庫

    從入門到精通:玩轉(zhuǎn)Python?Fire庫

    想快速打造屬于你的Python?GUI應(yīng)用嗎?拋開復(fù)雜的代碼,用Python?Fire庫就能輕松實現(xiàn)!本指南將引領(lǐng)你從零起步,駕馭Python?Fire的強(qiáng)大功能,讓編程既簡單又高效,準(zhǔn)備好了嗎?讓我們開始玩轉(zhuǎn)Python?Fire,開啟你的編程冒險吧!
    2024-02-02
  • pygame實現(xiàn)簡單五子棋游戲

    pygame實現(xiàn)簡單五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了pygame實現(xiàn)簡單五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下<BR>
    2022-01-01
  • 讓Python腳本暫停執(zhí)行的幾種方法(小結(jié))

    讓Python腳本暫停執(zhí)行的幾種方法(小結(jié))

    這篇文章主要介紹了讓Python腳本暫停執(zhí)行的幾種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • 從基礎(chǔ)到高級詳解Python函數(shù)返回多個值的完全指南

    從基礎(chǔ)到高級詳解Python函數(shù)返回多個值的完全指南

    在現(xiàn)代Python編程中,返回多個值的函數(shù)設(shè)計模式已被廣泛應(yīng)用于??數(shù)據(jù)處理??、??API開發(fā)??、??科學(xué)計算??等眾多領(lǐng)域,下面小編就為大家詳細(xì)介紹一下吧
    2025-10-10

最新評論

南漳县| 调兵山市| 会东县| 永兴县| 错那县| 中卫市| 镇安县| 锦屏县| 化州市| 宜阳县| 柘荣县| 星座| 达孜县| 波密县| 明水县| 革吉县| 靖西县| 阿巴嘎旗| 天祝| 彭州市| 繁峙县| 吉木乃县| 东乌珠穆沁旗| 自贡市| 交口县| 滨州市| 通渭县| 龙海市| 胶南市| 固阳县| 贵德县| 余姚市| 广汉市| 连南| 清涧县| 汽车| 宕昌县| 定结县| 西林县| 武宁县| 延寿县|