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

PyQt5 pyqt多線程操作入門

 更新時(shí)間:2018年05月05日 09:24:31   作者:翻滾吧挨踢男  
本篇文章主要介紹了PyQt5 pyqt多線程操作入門,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧

首先來看一個(gè)例子:

# coding=utf-8 
__author__ = 'a359680405'  
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import *  
global sec 
sec=0 
def setTime(): 
  global sec 
  sec+=1 
  lcdNumber.display(sec)     #LED顯示數(shù)字+1  
def work(): 
  timer.start(1000)        #計(jì)時(shí)器每秒計(jì)數(shù) 
  for i in range(2000000000): 
    pass 
  timer.stop()  
app=QApplication([]) 
top=QWidget() 
layout=QVBoxLayout(top)       #垂直布局類QVBoxLayout; 
lcdNumber=QLCDNumber()       #加個(gè)顯示屏 
layout.addWidget(lcdNumber) 
button=QPushButton("測試") 
layout.addWidget(button)  
timer=QTimer() 
timer.timeout.connect(setTime)   #每次計(jì)時(shí)結(jié)束,觸發(fā)setTime 
button.clicked.connect(work)  
top.show() 
app.exec() 

我們的主界面有一個(gè)用于顯示時(shí)間的 LCD 數(shù)字面板還有一個(gè)用于啟動(dòng)任務(wù)的按鈕。程序的目的是用戶點(diǎn)擊按鈕,開始一個(gè)非常耗時(shí)的運(yùn)算(程序中我們以一個(gè) 2000000000 次的循環(huán)來替代這個(gè)非常耗時(shí)的工作,在真實(shí)的程序中,這可能是一個(gè)網(wǎng)絡(luò)訪問,可能是需要復(fù)制一個(gè)很大的文件或者其它任務(wù)),同時(shí) LCD 開始顯示逝去的毫秒數(shù)。毫秒數(shù)通過一個(gè)計(jì)時(shí)器QTimer進(jìn)行更新。計(jì)算完成后,計(jì)時(shí)器停止。這是一個(gè)很簡單的應(yīng)用,也看不出有任何問題。但是當(dāng)我們開始運(yùn)行程序時(shí),問題就來了:點(diǎn)擊按鈕之后,程序界面直接停止響應(yīng),直到循環(huán)結(jié)束才開始重新更新,于是計(jì)時(shí)器使用顯示0。

有經(jīng)驗(yàn)的開發(fā)者立即指出,這里需要使用線程。這是因?yàn)?Qt 中所有界面都是在 UI 線程中(也被稱為主線程,就是執(zhí)行了QApplication::exec()的線程),在這個(gè)線程中執(zhí)行耗時(shí)的操作(比如那個(gè)循環(huán)),就會(huì)阻塞 UI 線程,從而讓界面停止響應(yīng)。界面停止響應(yīng),用戶體驗(yàn)自然不好,不過更嚴(yán)重的是,有些窗口管理程序會(huì)檢測到你的程序已經(jīng)失去響應(yīng),可能會(huì)建議用戶強(qiáng)制停止程序,這樣一來你的程序可能就此終止,任務(wù)再也無法完成。所以,為了避免這一問題,我們要使用 QThread 開啟一個(gè)新的線程:

# coding=utf-8 
__author__ = 'a359680405'  
from PyQt5.QtCore import * 
from PyQt5.QtGui import * 
from PyQt5.QtWidgets import *  
global sec 
sec=0 
class WorkThread(QThread): 
  trigger = pyqtSignal() 
  def __int__(self): 
    super(WorkThread,self).__init__() 
 
  def run(self): 
    for i in range(203300030): 
      pass 
    self.trigger.emit()     #循環(huán)完畢后發(fā)出信號(hào) 
 
def countTime(): 
  global sec 
  sec+=1 
  lcdNumber.display(sec)     #LED顯示數(shù)字+1 
 
def work(): 
  timer.start(1000)        #計(jì)時(shí)器每秒計(jì)數(shù) 
  workThread.start()       #計(jì)時(shí)開始 
  workThread.trigger.connect(timeStop)  #當(dāng)獲得循環(huán)完畢的信號(hào)時(shí),停止計(jì)數(shù) 
 
def timeStop(): 
  timer.stop() 
  print("運(yùn)行結(jié)束用時(shí)",lcdNumber.value()) 
  global sec 
  sec=0  
app=QApplication([]) 
top=QWidget() 
layout=QVBoxLayout(top)       #垂直布局類QVBoxLayout; 
lcdNumber=QLCDNumber()       #加個(gè)顯示屏 
layout.addWidget(lcdNumber) 
button=QPushButton("測試") 
layout.addWidget(button)  
timer=QTimer() 
workThread=WorkThread() 
button.clicked.connect(work) 
timer.timeout.connect(countTime)   #每次計(jì)時(shí)結(jié)束,觸發(fā)setTime  
top.show() 
app.exec() 

我增加了一個(gè)WorkerThread類。WorkerThread繼承自QThread類,重寫了其run()函數(shù)??梢哉J(rèn)為,run()函數(shù)就是新的線程需要執(zhí)行的代碼。在這里就是要執(zhí)行這個(gè)循環(huán),然后發(fā)出計(jì)算完成的信號(hào)。而在按鈕點(diǎn)擊的槽函數(shù)中,使用work()中的workThread.start()函數(shù)啟動(dòng)一個(gè)線程(注意,這里不是run()函數(shù))。再次運(yùn)行程序,你會(huì)發(fā)現(xiàn)現(xiàn)在界面已經(jīng)不會(huì)被阻塞了。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python pickle 和 shelve模塊的用法

    python pickle 和 shelve模塊的用法

    pickle和shelve模塊都可以把python對(duì)象存儲(chǔ)到文件中,下面來看看它們的用法吧
    2013-09-09
  • Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼

    Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼

    Python 隨機(jī)生成中文驗(yàn)證碼的實(shí)例代碼,需要的朋友可以參考一下
    2013-03-03
  • python利用線程生成不同尺寸的縮略圖實(shí)例詳解

    python利用線程生成不同尺寸的縮略圖實(shí)例詳解

    這篇文章主要介紹了python利用線程生成不同尺寸的縮略圖,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-05-05
  • python學(xué)習(xí)筆記:字典的使用示例詳解

    python學(xué)習(xí)筆記:字典的使用示例詳解

    python字典的使用: python字典有很多好用的地方。字典每個(gè)元素都有鍵和值。如同現(xiàn)代漢語字典中的拼音和對(duì)應(yīng)的文字。字典中的鍵是唯一的,而值不一定唯一。你看,和現(xiàn)代漢語字典多么的相似。
    2014-06-06
  • Python中的閉包與裝飾器的用法詳解

    Python中的閉包與裝飾器的用法詳解

    這篇文章主要介紹了Python中的閉包與裝飾器的用法詳解,裝飾器本質(zhì)上是一個(gè)Python函數(shù),它可以讓其他函數(shù)在不需要做任何代碼變動(dòng)的前提下增加額外功能,裝飾器的返回值也是一個(gè)函數(shù)對(duì)象,需要的朋友可以參考下
    2023-07-07
  • Matlab如何實(shí)現(xiàn)矩陣復(fù)制擴(kuò)充

    Matlab如何實(shí)現(xiàn)矩陣復(fù)制擴(kuò)充

    這篇文章主要介紹了使用Matlab實(shí)現(xiàn)矩陣復(fù)制擴(kuò)充的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • python:接口間數(shù)據(jù)傳遞與調(diào)用方法

    python:接口間數(shù)據(jù)傳遞與調(diào)用方法

    今天小編就為大家分享一篇python:接口間數(shù)據(jù)傳遞與調(diào)用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 對(duì)python中兩種列表元素去重函數(shù)性能的比較方法

    對(duì)python中兩種列表元素去重函數(shù)性能的比較方法

    今天小編就為大家分享一篇對(duì)python中兩種列表元素去重函數(shù)性能的比較方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • Python可以實(shí)現(xiàn)棧的結(jié)構(gòu)嗎

    Python可以實(shí)現(xiàn)棧的結(jié)構(gòu)嗎

    在本篇文章里小編給各位整理的是關(guān)于Python實(shí)現(xiàn)棧的結(jié)構(gòu)的條件的相關(guān)知識(shí)點(diǎn),有需要的朋友們可以學(xué)習(xí)下。
    2020-05-05
  • python貪吃蛇游戲代碼

    python貪吃蛇游戲代碼

    這篇文章主要為大家詳細(xì)介紹了python貪吃蛇游戲代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01

最新評(píng)論

湘潭市| 宣威市| 张掖市| 荣昌县| 广灵县| 镇康县| 衡阳市| 云安县| 太康县| 平度市| 昌都县| 临夏县| 分宜县| 黄梅县| 寿阳县| 长武县| 马龙县| 绥中县| 宜宾县| 东阳市| 兴化市| 福建省| 浦江县| 勐海县| 本溪市| 仙游县| 乌什县| 项城市| 黎川县| 澜沧| 江陵县| 卓资县| 青神县| 涞水县| 雅安市| 连州市| 辉县市| 内丘县| 常山县| 平果县| 兴安县|