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