今日、誰もがスレッド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使用動的データリフレッシュ方法は、すべての内容全体を共有する小さなシリーズである以上であります