0

我想知道是否有人对为什么以下 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,所以我不知道这在哪里是合适的。

此外,这里有一些完整的代码示例:

多处理 GUI 模式以对抗“无响应”阻塞

和这里:

https://stackoverflow.com/questions/15754826/gui-not-responding-general-multithreading-and-multprocessing-architecture?lq=1

任何帮助深表感谢。

4

0 回答 0