2

PyQt4 を使用していくつかのサンプル コードを実行しようとしています。Notepad++ と Enthought Canopy 環境から実行しようとしています。サンプル コードの全体を以下に示します。npp 内から、プラグイン nppExec をpython -i "$(FULL_CURRENT_PATH)"コマンドとして使用しています。(インタラクティブな-iなしでも試しました)

import sys
from PyQt4 import QtGui


def main():

    app = QtGui.QApplication(sys.argv)

    w = QtGui.QWidget()
    w.resize(250, 150)
    w.move(300, 300)
    w.setWindowTitle('Simple')
    w.show()

    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

npp 内から実行すると、内部コンソールがフリーズしているように見え (エラーなし)、ctrl-c で回復可能です

Canopy 内から実行すると、次のエラー メッセージが表示されます。

%run "c:\users\brian\appdata\local\temp\tmpfe9mmh.py"
---------------------------------------------------------------------------
ImportError                               Traceback (most recent call last)
C:\Users\Brian\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.0.0.1160.win-x86\lib\site-packages\IPython\utils\py3compat.pyc in execfile(fname, glob, loc)
    174             else:
    175                 filename = fname
--> 176             exec compile(scripttext, filename, 'exec') in glob, loc
    177     else:
    178         def execfile(fname, *where):

c:\users\brian\appdata\local\temp\tmpfe9mmh.py in <module>()
     20 
     21 import sys
---> 22 from PyQt4 import QtGui
     23 
     24 

C:\Users\Brian\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.0.0.1160.win-x86\lib\site-packages\IPython\external\qt_loaders.pyc in load_module(self, mod_name)
     43     Importing %s disabled by IPython, which has
     44     already imported an Incompatible QT Binding: %s
---> 45     """ % (mod_name, loaded_api()))
     46 
     47 ID = ImportDenier()

ImportError: 
    Importing PyQt4 disabled by IPython, which has
    already imported an Incompatible QT Binding: pyside

Canopy が単純な C:/python27 ではなく、一見奇妙な場所 (C:\Users\Brian\AppData\Local\Enthought\Canopy32) にアイテムを配置する理由について、私はかなり混乱しています。

Python 2.7 32 ビット、Canopy バージョン: 1.0.0.1160 32 ビット、Win7 64 ビットを実行しています。

4

2 に答える 2

0

マシンで python を実行すると、pyside (Qt の代替 python バインディング) が何らかの形で自動的にインポートされているようです。import pyside と pyqt の両方が何らかの衝突を引き起こし、問題を引き起こしています。

私は..pysideを使用しているパスにsys.pyという名前のモジュールがありますか? 組み込みモジュールである sys をインポートしていますが、パスに sys.py という名前のファイルがある場合は、代わりにそれがインポートされます。この場合、スクリプトを実行できます。

import sys

print sys.__file__

ファイルの場所を見つける。インポートされる sys モジュールが実際には組み込みモジュールである場合、sys には__file__属性がなく、例外が発生します。

ちなみに、私のマシンであなたのサンプルコードを試してみましたが、問題なく動作しました。

于 2013-05-05T04:04:39.023 に答える