2011-05-26 72 views
3

兩個文件。每個窗口都運行新窗口並自行工作。我需要同時運行它們。
當我運行first.pyw時,只顯示一個(秒)窗口。PyQt - 是否可以運行兩個應用程序?

是否有可能兩個都運行它們兩個?

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_()) 

我如何可以運行在不同模塊中的兩個應用程序?

回答

1

儘管應用程序可以有多個頂級窗口,但一次只能運行一個應用程序。 QCoreApplication docs說:

...應該只有一個QCoreApplication對象。

這也適用於QApplication,因爲它源自QCoreApplication。您可以通過C++中的QCoreApplication.instance()方法或qApp宏訪問該應用程序。

你期望從兩個不同的應用程序運行中得到什麼?相反,您可以讓每個模塊都提供一個頂級窗口,然後由應用程序啓動器顯示。

+0

模塊上有'read_file'功能。如果發現錯誤,應該增加新的彈出窗口。所以,'.show()'應該在模塊本身中。 – Qiao 2011-05-26 17:01:20

+0

但我明白了,這是不可能的,這是一個答案。 – Qiao 2011-05-26 17:03:53

0

您輸入第二個。因此,它甚至在你達到第一類的定義之前就被解釋了。由於second.pyw的最後一行是sys.exit,它後面的任何內容都不能被執行。

+0

我讓它只是'app2.exec _()',現在第一個窗口在第二個窗口後運行。但不是同時。 – Qiao 2011-05-26 16:49:40

+0

因爲'.exec _()'僅在正在運行的應用程序關閉時纔會返回。 – delnan 2011-05-26 16:50:35

+0

創建兩個線程。在一個線程中調用app.exec_(),在另一個線程中調用app2.exec_() – Hyperboreus 2011-05-26 16:53:25

2

接受的答案基本上是正確的,但有些情況下您想要依次運行多個QApplications,例如, :

  • 單元測試
  • 一個命令行工具,不應該要求一個運行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()) 
相關問題