Python Qtconsole: QApp = QCoreApplication.instance() возвращает None в Linux и допустимое QApplication в Windows

У меня есть программное обеспечение, которое имеет интерфейс GUI и интерфейс командной строки. Что он должен сделать, это определить, запущен ли он в qtconsole. Если это так, он не будет создавать новое приложение QApplication и отображать графический интерфейс неблокирующим образом. После того, как скрипт существует, появится объект 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 ответа

Решение

Проблема была в том, что я забыл аргумент '--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 или Internet Explorer. Таким же образом вы можете посещать сайт с несколькими браузерами, с помощью IPython вы можете подключаться к ядру с несколькими клиентами (console, qtconsole, notebook, emacs...)

Другие вопросы по тегам