Python Qtconsole: QApp = QCoreApplication.instance()在Linux上返



我有一个软件,它有一个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。我一直在破解这个问题,但我没有看到任何答案。

问题是我在运行

时忘记了'——pylab=qt '参数
ipython qtconsole --pylab=qt --color=Linux -c "%run main.py"

我猜在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

这里有一个误解,试图从内核确定您是否正在从qtconsole运行是没有意义的,而——pylab=qt只是运行集成与事件循环。这就像问一个开发者他的网站是用Firefox还是ie写的一样。以同样的方式,您可以使用多个浏览器访问网站,使用IPython,您可以使用多个客户端(控制台,qtconsole,笔记本,emacs…)连接到内核

最新更新