Python PyQt类多进程

Python PyQt类多进程,python,python-2.7,pyqt,pyqt4,python-multiprocessing,Python,Python 2.7,Pyqt,Pyqt4,Python Multiprocessing,我希望能够实例化许多QWidget()类型的类,每个类都在一个单独的进程中。就像谷歌浏览器在你打开一个新标签时所做的那样 这在python中可能吗 GUI元素(包括QWidget)只能在主线程中创建 但是,您可以将每个选项卡的模型和业务逻辑放在单独的线程中,并让每个选项卡使用信号和插槽与主线程通信。提供了执行此操作的工作模式的示例 这样,如果任何工作进程挂起,它不会影响主GUI线程的响应 class MyTab(QtGui.QWidget): def __init__(self, par

我希望能够实例化许多QWidget()类型的类,每个类都在一个单独的进程中。就像谷歌浏览器在你打开一个新标签时所做的那样

这在python中可能吗

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

但是,您可以将每个选项卡的模型和业务逻辑放在单独的线程中,并让每个选项卡使用
信号
插槽
与主线程通信。提供了执行此操作的工作模式的示例

这样,如果任何工作进程挂起,它不会影响主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})

这可能对我有用,但不幸的是我无法让它工作。它在调用invokeMethod时总是失败。运行时错误:QMetaObject。invokeMethod()调用失败:(您可能需要将函数声明为
Slots
。我已更新了答案。您也可以尝试在没有任何参数的情况下调用该函数,看看它是否有效。现在可以了!谢谢您的时间。我将尝试在我的应用程序中实现此功能,看看它是否对GUI的流动性有任何影响。干杯!我只对Windows感兴趣