如何解决使用多重处理启动另一个QApplication
我有一个很大的QApplication
,应该将其发送到辅助进程(multiprocessing.Process
)。在这些辅助过程中,我想使用它们自己的事件循环来运行单独的QCoreApplications
。
但是,以下操作无效:
from multiprocessing import Process
from PyQt5 import QtCore,QtWidgets,QtGui
class SecondApp(QtWidgets.QApplication):
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
self.mw = QtWidgets.QMainWindow()
central_widget = QtWidgets.QWidget(parent=self.mw)
central_layout = QtWidgets.QHBoxLayout()
central_widget.setLayout(central_layout)
self.mw.setCentralWidget(central_widget)
lbl = QtWidgets.QLabel(parent=central_widget)
lbl.setText("Second App")
central_layout.addWidget(lbl)
def __call__(self):
self.mw.show()
self.mw.raise_()
self.exec()
def launchSecondApp():
app2 = SecondApp(sys.argv)
app2()
def launchProcess():
proc = Process(target=launchSecondApp)
proc.start()
def launchFirst():
app = QtWidgets.QApplication(sys.argv)
mw = QtWidgets.QMainWindow()
central_widget = QtWidgets.QWidget(parent=mw)
central_layout = QtWidgets.QHBoxLayout()
central_widget.setLayout(central_layout)
mw.setCentralWidget(central_widget)
pb = QtWidgets.QPushButton()
pb.setText("Launch second app")
pb.clicked.connect(launchProcess)
central_layout.addWidget(pb)
mw.show()
mw.raise_()
app.exec_()
launchFirst()
在示例中,我使用QApplication
创建了一个简单的PushButton
。按下按钮时,将创建一个Process
,并在其中创建一个新的QApplication
(SecondApp
),其中仅包含一个标签。
运行代码时,我首先看到带有按钮的窗口。按下此按钮后,将出现第二个窗口,其外观与第一个窗口完全相同。仅当关闭此新打开的窗口时,SecondApp
窗口才会出现。
为什么会这样?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。