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

pyqt5 tablewidget 利用線程動態(tài)刷新數據的方法

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

問題

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

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

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

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

問題圖片

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

解決方法

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

thread函數

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

class Job(QtCore.QThread):#注意這里使用的是qt自己本身的線程,而不能用python自己的線程
  signal2=QtCore.pyqtSignal(tuple)#因為這個信號槽要繼承于Qobject,不然會發(fā)生沒有emit,connect函數的報錯,括號里面填寫的是發(fā)射的數據類型
  def signal2emit(self,var:tuple):
    self.signal2.emit(var)#朝connect的函數發(fā)射一個tuple

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

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

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

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

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

setItem函數,接受信號量

def setItem(var:tuple):#用于向jcb表格填寫內容
  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)#這是個進度條來的

朝表格中填寫數據的函數

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

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

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))

成果

這樣就順利實現(xiàn)了table widget的動態(tài)更新數據

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

相關文章

  • 在Python 的線程中運行協(xié)程的方法

    在Python 的線程中運行協(xié)程的方法

    這篇文章主要介紹了在Python 的線程中運行協(xié)程的方法,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • python通過鏈接抓取網站詳解

    python通過鏈接抓取網站詳解

    在本篇文章里小編給大家整理的是關于python通過鏈接抓取網站的詳細方法和知識點,需要的朋友們學習下。
    2019-11-11
  • pycharm顯示遠程圖片的實現(xiàn)

    pycharm顯示遠程圖片的實現(xiàn)

    這篇文章主要介紹了pycharm顯示遠程圖片的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • Pycharm導包失敗問題及解決

    Pycharm導包失敗問題及解決

    這篇文章主要介紹了Pycharm導包失敗問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • 更換Django默認的模板引擎為jinja2的實現(xiàn)方法

    更換Django默認的模板引擎為jinja2的實現(xiàn)方法

    今天小編就為大家分享一篇更換Django默認的模板引擎為jinja2的實現(xiàn)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Python如何實現(xiàn)伽馬矯正

    Python如何實現(xiàn)伽馬矯正

    這篇文章主要介紹了Python如何實現(xiàn)伽馬矯正問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • Python實現(xiàn)刪除windows下的長路徑文件

    Python實現(xiàn)刪除windows下的長路徑文件

    這篇文章主要為大家詳細介紹一下如何利用Python語言實現(xiàn)刪除windows下的長路徑文件功能,文中的示例代碼講解詳細,具有一定參考借鑒價值,感興趣的可以了解一下
    2022-07-07
  • 分析語音數據增強及python實現(xiàn)

    分析語音數據增強及python實現(xiàn)

    數據增強是一種生成合成數據的方法,即通過調整原始樣本來創(chuàng)建新樣本。這樣我們就可獲得大量的數據。這不僅增加了數據集的大小,還提供了單個樣本的多個變體,這有助于我們的機器學習模型避免過度擬合
    2021-06-06
  • OpenCV學習記錄python實現(xiàn)連通域處理函數

    OpenCV學習記錄python實現(xiàn)連通域處理函數

    這篇文章主要為大家介紹了OpenCV學習記錄python實現(xiàn)連通域處理函數cv2.connectedComponentsWithStats()和cv2.connectedComponents()的使用示例詳解
    2022-06-06
  • python 列出面板數據所有變量名的示例代碼

    python 列出面板數據所有變量名的示例代碼

    在Python中,處理面板數據(Panel Data)通常使用pandas庫,特別是當數據以DataFrame或Panel,這篇文章主要介紹了python 列出面板數據所有變量名,需要的朋友可以參考下
    2024-06-06

最新評論

亳州市| 顺昌县| 吴旗县| 奉化市| 温州市| 房产| 曲松县| 安远县| 朔州市| 新邵县| 新泰市| 资阳市| 阜康市| 邵阳县| 福贡县| 延寿县| 玛曲县| 蒙城县| 普陀区| 莱西市| 青州市| 梁山县| 金门县| 孙吴县| 会昌县| 晋中市| 沙雅县| 宾阳县| 上杭县| 成武县| 湘潭县| 彭泽县| 凤阳县| 桦甸市| 肃北| 阿巴嘎旗| 横山县| 密云县| 英吉沙县| 福安市| 义马市|