Python Qtconsole:QApp = QCoreApplication.instance()在Linux上返回None,在Windows上返回有效的QApplication

时间:2013-04-01 22:22:11

标签: python pyqt4 ipython qtconsole

我的软件有GUI界面和命令行界面。它应该做的是检测它是否在qtconsole中运行。如果是,它将不会创建新的QApplication并以非阻塞方式显示GUI。脚本存在后,将有一个cmd对象,用户可以在该对象中与较低级别的内容进行交互。

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。我一直在讨厌这个问题,但我没有看到任何答案。

3 个答案:

答案 0 :(得分:2)

问题是当我跑

时我忘了'--pylab = qt'这个论点
ipython qtconsole --pylab=qt --color=Linux -c "%run main.py"

答案 1 :(得分:0)

我猜你在Windows中使用IDE或其他东西来执行你的代码。使用提供的示例,我总是得到None的返回值。

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

答案 2 :(得分:0)

这里有一种误解,试图从内核确定不是你从qtconsole运行没有感觉。并且--pylab = qt只运行与事件循环的集成。这就像询问开发人员他的网站是用Firefox还是Internet Explorer编写的。以同样的方式,您可以使用多个浏览器访问该网站,使用IPython可以连接到具有多个客户端的内核(控制台,qtconsole,笔记本,emacs ......)