我在寫一個簡單的腳本來調整照片大小。我希望在調整每個文件大小後在其中顯示消息的文本字段的小部件。線程實時日誌記錄
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import time, sys
from PyQt5.QtCore import pyqtSignal, QThread
from PyQt5.QtWidgets import QApplication, QPushButton, QTextEdit, QWidget, QVBoxLayout
class Thread(QThread):
log = pyqtSignal(str)
def __init__(self, parent=None):
super(Thread, self).__init__(parent)
def test(self, i):
time.sleep(1)
self.log.emit(str(i))
class Widget(QWidget):
def __init__(self):
super().__init__()
self.ui()
def process(self):
self.toLog('some text...')
worker = Thread()
worker.log.connect(self.toLog)
for i in range(1, 5):
worker.test(i)
def ui(self):
self.LogOutputTxt = QTextEdit()
self.LogOutputTxt.setReadOnly(True)
startBtn = QPushButton('Start')
startBtn.clicked.connect(self.start)
layout = QVBoxLayout()
layout.addWidget(self.LogOutputTxt)
layout.addWidget(startBtn)
self.setLayout(layout)
self.resize(400, 300)
self.show()
def start(self):
self.toLog('start')
self.process()
def toLog(self, txt):
self.LogOutputTxt.append(txt)
if __name__ == '__main__':
app = QApplication(sys.argv)
ui = Widget()
sys.exit(app.exec_())
到目前爲止,在所有文件調整大小後,所有消息都立即出現。有沒有辦法一個接一個地做(我的意思是文件大小調整,消息顯示等)?
您發佈的代碼不完整,在很多方面都是錯誤的,所以很難重建它的建設性。請閱讀關於如何製作[mcve]的指導。 – ekhumoro
對不起,我重寫了代碼,希望現在好一點。 – przemekk
您是否期望這些工作線程同時運行?如果他們正在執行cpu-bound的python代碼(如調整圖像大小),則一次只能運行其中的一個(因爲全局解釋器鎖定)。對於並行處理,您需要使用單獨的進程,而不是線程。 – ekhumoro