0

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

4

3 回答 3

2

问题是我在运行时忘记了“--pylab=qt”参数

ipython qtconsole --pylab=qt --color=Linux -c "%run main.py"
于 2013-04-01T22:59:32.820 回答
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
于 2013-04-01T22:45:02.380 回答
0

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

于 2013-04-02T06:06:13.810 回答