PyQt是否可以运行两个应用程序?

2024-09-28 23:26:08 发布

您现在位置:Python中文网/ 问答频道 /正文

两个文件。每一个运行新窗口并独立工作。我需要同时运行它们。
当我运行first.pyw时,只显示一个(秒)窗口。在

有没有可能两个人都跑?在

在第一.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_())

在第二个.pyw公司名称:

^{pr2}$

如何运行位于不同模块中的两个应用程序?在


Tags: 文件fromimportself名称appinitsys
3条回答

虽然应用程序可以有多个顶级窗口,但一次只能运行单个应用程序。QCoreApplication docs说:

...there should be exactly one QCoreApplication object.

这也适用于QApplication,因为它来自QCoreApplication。您可以通过QCoreApplication.instance()方法或qApp宏在C++中访问该应用程序。在

运行两个不同的应用程序,您希望得到什么?相反,您可以让每个模块提供一个顶级窗口,然后由应用程序启动器显示。在

公认的答案基本上是正确的,但在某些情况下,您需要一个接一个地运行多个qa应用程序,例如:

  • 单元测试
  • 一个命令行工具,它不需要运行的X服务器(因此在启动时没有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())

你进口第二。因此,它在您甚至还没有到达类的定义之前就被解释了。作为最后一行第二个.pyw是系统出口,后面什么都不能执行。在

相关问题 更多 >