pyqt5 tablewidgetメソッドスレッドの動的リフレッシュデータ

今日、誰もがスレッドpyqt5のtablewidgetダイナミックリフレッシュデータ、良い基準値を用いる方法を共有するための小型のは、我々は手助けをしたいです。小扁は、一緒に見にフォローアップする
問題を

私はこの方法でデータを更新するために、テーブルに向けて内側に直接、スレッドを書き込もうとした後、データを毎回取得し、する必要がありますので、私は、スレッドを使用することを知っています。

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

ディスカバリーデータはなく、かなりのスレッドとしてどのようなデータを表示するために、リアルタイム、ポイントで実行されています

そして、いくつかの問題があるでしょう

問題の画像

比較を行うために、私は、フォームには、ジョブ名table.setItemの方法を変更します記入し、他のグリッド信号のメカニズムを使用して、あなたは明らかにどこに問題が嘘を見ることができます!ここに画像を挿入説明
ソリューション

コアプログラムは、信号「起動受け入れる」まで直接であれば、溝関数QTによって更新される、との問題をQTに機能するスロットを介して取得しないように組み立てQTウィンドウを通知する信号を送信することです

スレッド関数

自分のスレッドスレッドパッケージを書くため、元のクラスのpythonで内部では、プロセスへのthreading.Eventの使用は、()ブロックされ、直接QtCore.QThread、2混合一緒に修正すること期待していなかった、それはまた、使用することができます。
クラスジョブ(QtCore.QThread):#注なくパイソン自身のスレッド使用するよりスレッド自体のQTの使用、
この信号はQObjectのスロットを継承するためSIGNAL2 = QtCore.pyqtSignal(タプル)#は、そうでなければEMITが生じないあります、接続機能は、データ型を充填するために送信され、括弧内に与えられます

  def signal2emit(self,var:tuple):
    self.signal2.emit(var)#朝connect的函数发射一个tuple
 
  def __init__(self, *args, **kwargs):#这里自己实现
    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)#连接发射函数
 
  def run(self):
    global SystemTime,TimePice#声明要用的全局变量
    while self.__running.isSet():#如果被设置为了true就继续,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()    # 将线程从暂停状态恢复, 如何已经暂停的话
    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)#这是个进度条来的

表関数に向けてデータを記入

これは、乾物のメインスレッドの一部です

コメント部分は、テーブル内のデータのセットの部分に向かって直接である前請求項には、量Qthreadにより送信信号には十分ではありません

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

実績

動的に更新されたデータ・テーブル・ウィジェットのこの円滑な実現!ここに画像を挿入説明
先輩が学習しているかを確認するために私たちのpython学習サイトをオススメ!基本的なPythonスクリプト、爬虫類、ジャンゴ、データマイニング、プログラミング技術から、だけでなく、戦闘にゼロベースのpython小さなパートナーを学ぶすべての愛に与えられたデータ項目を、並べ替え!Pythonのベテランの日には、学習し、細部に注意を払う必要性に、クリックにご参加くださいする方法のいくつかを共有するために、技術のタイミングを説明する必要が学習者の集まりPYTHON

このスレッドはpyqt5 tablewidget使用動的データリフレッシュ方法は、すべての内容全体を共有する小さなシリーズである以上であります

公開された51元の記事 ウォン称賛17 ビュー30000 +

おすすめ

転載: blog.csdn.net/haoxun02/article/details/104418738