2017-12-10 5 views
-1

私はマルチスレッドで新しいです。私が使用しているビデオファイルはうまく動作し、開始時にプログレスバーに進捗バーがパーセントで表示されます。私はコードを実行すると、下のコードがクラッシュし続ける例として、現在のCPU使用量の値を継続的にプログレスバーの値を変更したい場合。コードがなぜ機能しないのですか?PyQt5 - マルチスレッド設定(Qthread)でprogresssbarを更新しているときにguiをクラッシュさせないようにするには?

問題が発生して接続していると思います。もしそうなら、私は何ができますか?そして、どうすればこの問題を修正できますか?助けを前にありがとう。

import sys 
from PyQt5 import QtCore, QtGui, QtWidgets 
from PyQt5.QtCore import QObject, pyqtSignal 
import sysinfo 
from multi import Ui_Form 


class main(QtWidgets.QWidget ,Ui_Form): 
    cpu_value = pyqtSignal() 
    def __init__(self, parent = None): 
     super(main,self).__init__(parent) 
     self.setupUi(self) 
     self.threadclass = ThreadClass() 
     self.threadclass.start() 
     self.cpu_value.connect(self.updateProgressBar) 



    def updateProgressBar(self): 
     val = sysinfo.getCPU() 
     self.progressBar.setValue(val) 

class ThreadClass(QtCore.QThread): 
    def __init__(self, parent = None): 
     super(ThreadClass,self).__init__(parent) 

    def run(self): 
     while 1: 
      val = sysinfo.getCPU() 
      self.cpu_value.emit(val) 

if __name__ == '__main__': 
    a = QtWidgets.QApplication(sys.argv) 
    app = main() 
    app.show() 
    a.exec_() 
+0

私の答えをお試しくださいこれが正しいとマークするのを忘れることができない場合は、次のリンクを確認してください:[ツアー] – eyllanesc

+0

'あなたのコードは正しいと思います。次に 'run()'メソッドで 'while 1:getcpu_and_emit'を実行しますが、これは良い考えではありません。あなたは別のスレッドでも、while-True-opはcpu-costingだからです。 「タイマーを使って情報を更新するのが良いアイデアだと思う」私の答えを見てください。 – Silencer

+0

両方の回答がここのソリューションの半分であると思われ、マージする必要があります。またはeyllanesc .. 'self.setupUi(self)'に問題の適切なプログレスバーがありますか? – ZF007

答えて

0

ENV:python3.5 + pyqt5.9

私はそのようなCPUの情報を更新するためにタイマーを使用します。

enter image description here


#!/usr/bin/python3 
# 2017.12.10 13:20:11 CST 
# 显示 CPU 

import sys 
from PyQt5 import QtCore, QtWidgets 
import psutil 

class CPU(QtWidgets.QProgressBar): 
    def __init__(self, parent=None): 
     super().__init__(parent) 
     self.setWindowTitle("CPU Info") 
     self.timer = QtCore.QTimer(self) 
     self.timer.timeout.connect(lambda : self.setValue(psutil.cpu_percent())) 
     self.timer.start(1000) 

if __name__ == '__main__': 
    app = QtWidgets.QApplication(sys.argv) 
    win = CPU() 
    win.show() 
    app.exec_() 
関連する問題