2013-04-01 54 views
0

我有一個具有GUI界面和命令行界面的軟件。它應該做的是檢測它是否在qtconsole中運行。如果是,它不會創建一個新的QApplication並以非阻塞的方式顯示GUI。腳本存在後,將會有一個cmd對象,用戶可以在較低級別與事物進行交互。Python Qtconsole:QApp = QCoreApplication.instance()在Linux上返回None,在Windows上返回一個有效的QApplication

from PyQt4.QtCore import QCoreApplication 
from PyQt4.Qt import QApplication 
import sys 

QApp = QCoreApplication.instance() 
new_qapp_bit = False 
if QApp == None: 
    print 'running without the qt console' 
    new_qapp_bit = True 
    QApp = QApplication(sys.argv) 
else: 
    print 'found the qt console' 

cmd = MyCMDInterface(use_gui=True) 

if new_qapp_bit 
    sys.exit(QApp.exec_()) 

在Windows上完美的作品,QCoreApplication.instance()返回一個有效的QApplication按計劃一切順利,但在Linux和Mac返回None。我一直在黑客攻擊,我沒有看到任何答案。

回答

2

問題是我忘了「--pylab = QT」的說法,當我跑

ipython qtconsole --pylab=qt --color=Linux -c "%run main.py" 
0

我猜測,在Windows中,您正在使用IDE或其他東西來執行您的代碼。使用提供的示例,我總是會得到無返回值。

Python 2.6.2 (r262:71605, Apr 14 2009, 22:40:02) [MSC v.1500 32 bit (Intel)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> from PyQt4.QtCore import QCoreApplication 
>>> from PyQt4.Qt import QApplication 
>>> import sys 
>>> 
>>> QApp = QCoreApplication.instance() 
>>> new_qapp_bit = False 
>>> if QApp == None: 
...  print 'running without the qt console' 
...  new_qapp_bit = True 
...  QApp = QApplication(sys.argv) 
... else: 
...  print 'found the qt console' 
running without the qt console 
+0

我從IPython qtconsole應用程序運行它,但我修正了錯誤。 – Erotemic

0

有一種誤解,在這裏,試圖從內核,以確定閹不不,你是從運行qtconsole沒有任何意義。而--pylab = qt只是運行與事件循環的集成。這就像問一個開發人員他的網站是用Firefox還是Internet Explorer編寫的。以同樣的方式,你可以訪問多個瀏覽器的網站,與IPython,你可以連接到多個客戶端(控制檯,qtconsole,筆記本電腦,emacs的... ...)內核