两个文件。每个都运行新窗口并自行工作。我需要同时运行它们
当我运行first.pyw
时,只显示一个(第二个)窗口。
是否有可能两个同时运行它们?
first.pyw:
import sys
from PyQt4.QtGui import *
import second
class first(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setWindowTitle('first')
app = QApplication(sys.argv)
firstApp = first()
firstApp.show()
sys.exit(app.exec_())
second.pyw:
import sys
from PyQt4.QtGui import *
class second(QWidget):
def __init__(self, parent=None):
QWidget.__init__(self, parent)
self.setWindowTitle('second')
app2 = QApplication(sys.argv)
secondApp = second()
secondApp.show()
sys.exit(app2.exec_())
如何运行两个不同模块的应用程序?
答案 0 :(得分:3)
接受的答案基本上是正确的,但在某些情况下,您希望一个接一个地运行多个QApplication,例如:
我最终使用multiprocessing
模块在一个单独的进程中启动每个QApplication
,以便每个模块独立于其他进程。
from multiprocessing import Queue, Process
class MyApp(Process):
def __init__(self):
self.queue = Queue(1)
super(MyApp, self).__init__()
def run(self):
app = QApplication([])
...
self.queue.put(return_value)
app1 = MyApp()
app1.start()
app1.join()
print("App 1 returned: " + app1.queue.get())
app2 = MyApp()
app2.start()
app2.join()
print("App 2 returned: " + app1.queue.get())
答案 1 :(得分:1)
虽然您的应用程序可以有多个顶级窗口,但您一次只能运行一个应用程序。 QCoreApplication docs说:
......应该只有一个QCoreApplication对象。
这也适用于QApplication,因为它源自QCoreApplication。您可以通过QCoreApplication.instance()方法或C ++中的qApp宏来访问该应用程序。
您希望在运行两个不同的应用程序时获得什么?相反,您可以让每个模块提供一个顶级窗口,然后由应用程序启动器显示。
答案 2 :(得分:-1)
您导入第二个。因此,在您首先达到类的定义之前,它会被解释。由于second.pyw的最后一行是sys.exit,因此无法执行任何操作。