PyQt 类 多进程

PyQt Classes Multiprocess

我希望能够实例化多个 QWidget() 类型 类,每个都在一个单独的进程中。就像 Google Chrome 在您打开新标签页时所做的那样。

这在 python 中可行吗?

GUI元素(包括QWidget)只能在主线程中创建。

但是,您可以将每个选项卡的模型和业务逻辑放在单独的线程中,并使用 SignalsSlots 分别与主线程通信。 Qt documentation for QThreads 提供了一个 Worker Pattern 的例子。

这样,即使任何工作进程挂起,也不会影响主 GUI 线程的响应能力。

class MyTab(QtGui.QWidget):
    def __init__(self, parent):
       ...
       self.worker = Worker()
       self.thread = QtCore.QThread(self)
       self.worker.moveToThread(self.thread)
       self.worker.resultReady.connect(self.handleResult)
       self.thread.start()

    def callSomeFunction(self):
        QtCore.QMetaObject.invokeMethod(self.worker, 'someFunction', QtCore.Qt.QueuedConnection, QtCore.Q_ARG(str, 'arg1'))

    @QtCore.pyqtSlot(object)
    def handleResult(self, result):
        ... # do stuff with result


class Worker(QtCore.QObject):

    resultReady = QtCore.pyqtSignal(object)

    @QtCore.pyqtSlot(str)
    def someFunction(self, arg):
        ...
        self.resultReady.emit({'func': 'someFunction', 'result': True})