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

pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法

 更新時(shí)間:2019年06月17日 20:41:48   作者:請(qǐng)叫我西木同學(xué)  
今天小編就為大家分享一篇pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧

問題

知道要用線程,所以就先嘗試寫了一個(gè)線程,然后每次都獲取數(shù)據(jù),然后直接通過這種方法來朝table里面更新數(shù)據(jù)。

#python代碼
table=MainWindow_ui.tableWidget_2
table.setItem(i,0,QtWidgets.QTableWidgetItem(str(jcb.Name)))

發(fā)現(xiàn)數(shù)據(jù)并不是想象中跟線程運(yùn)行那樣實(shí)時(shí)的,要點(diǎn)一下才能顯示出數(shù)據(jù)來

并且還會(huì)出現(xiàn)一些問題

問題圖片

為了做出對(duì)比,我將作業(yè)名的表格填寫改成table.setItem的方式,其他格子用信號(hào)量機(jī)制,可以很清楚的看到問題所在!?。?!

解決方法

核心是要通過qt的槽函數(shù)來發(fā)射信號(hào)告知qt窗口的組件來進(jìn)行更新,如果是直接程序上來“發(fā)射接受”信號(hào),而不通過qt的槽函數(shù)來弄就會(huì)出現(xiàn)問題

thread函數(shù)

原本class里面自己寫的是一個(gè)python的threading包的線程,利用threading.Event()來進(jìn)行進(jìn)程阻塞,沒想到直接修改成 QtCore.QThread,兩個(gè)混合在一起也能用。。。

class Job(QtCore.QThread):#注意這里使用的是qt自己本身的線程,而不能用python自己的線程
  signal2=QtCore.pyqtSignal(tuple)#因?yàn)檫@個(gè)信號(hào)槽要繼承于Qobject,不然會(huì)發(fā)生沒有emit,connect函數(shù)的報(bào)錯(cuò),括號(hào)里面填寫的是發(fā)射的數(shù)據(jù)類型
  def signal2emit(self,var:tuple):
    self.signal2.emit(var)#朝connect的函數(shù)發(fā)射一個(gè)tuple

  def __init__(self, *args, **kwargs):#這里自己實(shí)現(xiàn)
    super(Job, self).__init__(*args, **kwargs)
    self.__flag = threading.Event()   # 用于暫停線程的標(biāo)識(shí)
    self.__flag.set()    # 設(shè)置為True
    self.__running = threading.Event()   # 用于停止線程的標(biāo)識(shí)
    self.__running.set()   # 將running設(shè)置為True
    self.signal2.connect(setItem)#連接發(fā)射函數(shù)

  def run(self):
    global SystemTime,TimePice#聲明要用的全局變量
    while self.__running.isSet():#如果被設(shè)置為了true就繼續(xù),false就終止了
      self.__flag.wait()   # 為True時(shí)立即返回, 為False時(shí)阻塞直到內(nèi)部的標(biāo)識(shí)位為True后返回
      ###################
      #這里寫線程要干的事情#
      ###################
      time.sleep(1)

  def pause(self):
    self.__flag.clear()   # 設(shè)置為False, 讓線程阻塞

  def resume(self):
    self.__flag.set()  # 設(shè)置為True, 讓線程停止阻塞

  def stop(self):
    self.__flag.set()    # 將線程從暫停狀態(tài)恢復(fù), 如何已經(jīng)暫停的話
    self.__running.clear()    # 設(shè)置為False 

setItem函數(shù),接受信號(hào)量

def setItem(var:tuple):#用于向jcb表格填寫內(nèi)容
  i=var[0]#行
  j=var[1]#列
  s=var[2]#值
  table=MainWindow_ui.tableWidget_2
  if j != 6 :
    table.setItem(i,j,QtWidgets.QTableWidgetItem(str(s)))
  else :
    table.cellWidget(i,6).setValue(s)#這是個(gè)進(jìn)度條來的

朝表格中填寫數(shù)據(jù)的函數(shù)

這是放在主線程中該干的事情的一部分

其中注釋掉的部分就是之前直接朝表格中set數(shù)據(jù)的部分,這是不行的,要通過Qthread來發(fā)射信號(hào)量

def Print_Job():
  rowcol=len(Jcb_Ready_List)+len(Jcb_Wait_List)
  print(rowcol)
  #MainWindow_ui.tableWidget_2.setRowCount(rowcol)
  for i in range(0,rowcol):
    MainWindow_ui.tableWidget_2.showRow(i)
  #for i in range(rowcol,100):
  #  MainWindow_ui.tableWidget_2.hideRow(i)
  for i in range(0,len(Jcb_Ready_List)):
    jcb=Jcb_Ready_List[i]
    table=MainWindow_ui.tableWidget_2
                     #table.setItem(i,0,QtWidgets.QTableWidgetItem(str(jcb.Name)))
    MainThread.signal2emit((i,0,jcb.Name))
    #table.setItem(i,1,QtWidgets.QTableWidgetItem(str(jcb.Arrival_time)))
    MainThread.signal2emit((i,1,jcb.Arrival_time))
    #table.setItem(i,2,QtWidgets.QTableWidgetItem(str(jcb.Need_memory)))
    MainThread.signal2emit((i,2,jcb.Need_memory))
    #table.setItem(i,3,QtWidgets.QTableWidgetItem(str(jcb.Need_time)))
    MainThread.signal2emit((i,3,jcb.Need_time))
    #table.setItem(i,4,QtWidgets.QTableWidgetItem(str(jcb.Already_execution_time)))
    MainThread.signal2emit((i,4,jcb.Already_execution_time))
    #table.setItem(i,5,QtWidgets.QTableWidgetItem(str(jcb.Wait_time)))
    MainThread.signal2emit((i,5,jcb.Wait_time))
    #bar:QtWidgets.QProgressBar=MainWindow_ui.tableWidget_2.cellWidget(i,6)
    #bar.setValue(100-jcb.Need_time/(jcb.Already_execution_time+jcb.Need_time)*100)
    MainThread.signal2emit((i,6,100-jcb.Need_time/(jcb.Already_execution_time+jcb.Need_time)*100))

成果

這樣就順利實(shí)現(xiàn)了table widget的動(dòng)態(tài)更新數(shù)據(jù)

以上這篇pyqt5 tablewidget 利用線程動(dòng)態(tài)刷新數(shù)據(jù)的方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列詳解

    Python數(shù)據(jù)結(jié)構(gòu)之隊(duì)列詳解

    棧和隊(duì)列是在程序設(shè)計(jì)中常見的數(shù)據(jù)類型。本節(jié)將詳細(xì)介紹隊(duì)列的定義及其不同實(shí)現(xiàn),并且給出隊(duì)列的一些實(shí)際應(yīng)用,感興趣的小伙伴可以了解一下
    2022-03-03
  • Python中for循環(huán)語句實(shí)戰(zhàn)案例

    Python中for循環(huán)語句實(shí)戰(zhàn)案例

    這篇文章主要給大家介紹了關(guān)于Python中for循環(huán)語句的相關(guān)資料,python中for循環(huán)一般用來迭代字符串,列表,元組等,當(dāng)for循環(huán)用于迭代時(shí)不需要考慮循環(huán)次數(shù),循環(huán)次數(shù)由后面的對(duì)象長(zhǎng)度來決定,需要的朋友可以參考下
    2023-09-09
  • Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解

    Python機(jī)器學(xué)習(xí)應(yīng)用之基于線性判別模型的分類篇詳解

    線性判別分析(Linear?Discriminant?Analysis,?LDA)是一種監(jiān)督學(xué)習(xí)的降維方法,也就是說數(shù)據(jù)集的每個(gè)樣本是有類別輸出。和之前介紹的機(jī)器學(xué)習(xí)降維之主成分分析(PCA)方法不同,PCA是不考慮樣本類別輸出的無監(jiān)督學(xué)習(xí)方法
    2022-01-01
  • python shutil文件操作工具使用實(shí)例分析

    python shutil文件操作工具使用實(shí)例分析

    這篇文章主要介紹了python shutil文件操作工具使用實(shí)例分析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • Python實(shí)現(xiàn)新浪博客備份的方法

    Python實(shí)現(xiàn)新浪博客備份的方法

    這篇文章主要介紹了Python實(shí)現(xiàn)新浪博客備份的方法,涉及Python正則操作,字符串操作及文本操作的相關(guān)技巧,需要的朋友可以參考下
    2016-04-04
  • pandas 對(duì)日期類型數(shù)據(jù)的處理方法詳解

    pandas 對(duì)日期類型數(shù)據(jù)的處理方法詳解

    這篇文章主要介紹了pandas 對(duì)日期類型數(shù)據(jù)的處理方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 基于Python實(shí)現(xiàn)視頻分辨率轉(zhuǎn)換

    基于Python實(shí)現(xiàn)視頻分辨率轉(zhuǎn)換

    這篇文章主要介紹了基于Python實(shí)現(xiàn)視頻的分辨率轉(zhuǎn)換的示例代碼,文中的代碼講解詳細(xì),對(duì)學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以了解一下
    2021-12-12
  • win與linux系統(tǒng)中python requests 安裝

    win與linux系統(tǒng)中python requests 安裝

    requests是Python的一個(gè)HTTP客戶端庫,跟urllib,urllib2類似,今天我們主要來談?wù)剋in與linux系統(tǒng)中python requests的安裝方法以及使用指南
    2016-12-12
  • python可迭代類型遍歷過程中數(shù)據(jù)改變會(huì)不會(huì)報(bào)錯(cuò)

    python可迭代類型遍歷過程中數(shù)據(jù)改變會(huì)不會(huì)報(bào)錯(cuò)

    這篇文章主要介紹了python可迭代類型遍歷過程中數(shù)據(jù)改變會(huì)不會(huì)報(bào)錯(cuò)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • Python父目錄、子目錄的相互調(diào)用方法

    Python父目錄、子目錄的相互調(diào)用方法

    今天小編就為大家分享一篇Python父目錄、子目錄的相互調(diào)用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-02-02

最新評(píng)論