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 は、イベント ループとの統合を実行するだけです。開発者に、自分の Web サイトが Firefox で作成されたのか Internet Explorer で作成されたのかを尋ねるようなものです。同じように、複数のブラウザーで Web サイトにアクセスできます。IPython を使用すると、複数のクライアント (コンソール、qtconsole、ノートブック、emacs...) でカーネルに接続できます。

于 2013-04-02T06:06:13.810 に答える