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...)