マルチスレッドでUIの変更
2020/12/30
Python 3.8.2,PySide2 5.15.2
重い処理等をする際に、マルチスレッドでプロセスを回しつつ、画面を更新するには、シグナルを送る必要があるらしい。
(Widgetを共有して直接UIを変更しても反映されない)
import sys,time
from PySide2 import QtCore,QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, *argv, **keywords ):
super(MainWindow,self).__init__(*argv,**keywords)
self.label = QtWidgets.QLabel(self)
self.thread = TestProcess(self)
self.thread.signal.connect(self.setText)
self.thread.start()
def setText(self,n):
self.label.setText('繰り返し回数 n='+str(n))
class TestProcess(QtCore.QThread):
signal = QtCore.Signal(int)
def run(self):
n = 0
while True:
n += 1
self.signal.emit(n)
time.sleep(1)
def main():
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
複数の情報を返したい時はlistかtupleを使う
hanging GUI directly from Qthread PyQt 5
https://stackoverflow.com/questions/45665787/changing-gui-directly-from-qthread-pyqt-5