我想知道是否有人对为什么以下 PyQt 信号/插槽设置会起作用有任何想法,而添加多处理会导致 GUI 不更新。在这两种情况下都会发送信号,但信号/插槽可以更新 GUI,而多处理布局则不能。
这是我拥有的一般设置:对于 PyQt 信号和插槽,我有这个,它有效:
# signals and slots
class Worker(QObject):
...
# send signals in for loop to tab
...
class Tab(QTabWidget):
...
# start thread
...
# get signals and update GUI
class MainWindow:
...
# make GUI stuff
...
# start worker process
虽然这个多处理代码没有:
# signals and slots *with multiprocessing*
class Worker(QObject):
...
# send messages down a pipe in for loop to tab
...
class Worker_thread(QThread):
...
# start process
...
# get messages from Worker and send signals to update GUI function in Tab
class Tab(QTabWidget):
...
# start Worker_Thread
...
# get signals and update GUI
class MainWindow:
...
# make GUI stuff
...
# start Worker_thread process
这是从 Worker 获取消息并发送信号以在多处理情况下更新 GUI 的函数:
@QtCore.pyqtSlot()
def start_computation(self):
self.process.start()
while(True):
try:
message = self.consumer.recv()
self.update_signal.emit(message)
except EOFError:
pass
if message == 'done with processing':
self.done_signal.emit()
break
#self.parent.update_GUI(message)
self.process.join()
return
我需要关闭这里的Pipe
某个地方吗?它必须不断地阅读进程以了解它的进度并始终更新 GUI,所以我不知道这在哪里是合适的。
此外,这里有一些完整的代码示例:
和这里:
任何帮助深表感谢。