2016-04-12 3 views
0


みなさんこんにちは!私が使用して簡単なGUIアプリケーションをコーディングしていますなぜMS Windows "Open with"オプションでイメージパスが実現しないのですか?

...
- PyQtは5
- Pythonの3.4
- Windows 7の

私のプロジェクトは、アイコン画像を含む "IMG" サブフォルダがあります。

まず、同じフォルダにプログラムを実行するバッチファイルを作成しました。

ファイル名:run_app.bat
ファイルのテキスト:PY myapp.py

このバッチファイルが正常に動作します。しかし、この方法ではcmdウィンドウが表示され、myapp.pyプログラムが終了すると消えます。私はこのcmdウィンドウを表示したくありません。

「Open with」オプションを使用し、pythonw.exeにリンクしました。これも正しく機能していますが、イメージのパスを認識しませんでした。だから、すべてのアイコン画像は消えてしまいます。

コードでは、 'img/open_dir.png'のような相対パスを使用しました。しかし、相対パスを絶対パスに固定してmyapp.pyを "Open with"で実行すると、アイコンが再び表示されます。

この違いは何ですか?

相対パスを絶対パスに変更したくないです。プログラムのパスは時々変化する可能性があるためです。

この問題を解決する方法はありますか?

答えて

1

相対パスは、常に現在の作業ディレクトリからの相対パスです。 cdをそのディレクトリに置いてスクリプトを実行しない限り、これは必ずしもスクリプトが存在するディレクトリではありません。デフォルトでは、ほとんどのプログラムはユーザーのホームディレクトリの現在の作業ディレクトリで起動されます。

スクリプトパスを基準にしてパスを構築する一般的な方法は、Pythonモジュールの__file__属性を使用することです。これにより、imgとスクリプトを別のディレクトリに移動しても動作する相対パスを構築することができます。

import os 
root = os.path.dirname(os.path.abspath(__file__)) 
img_path = os.path.join(root, 'img/open_dir.png') 
+0

ありがとうブレンダン。あなたが示唆した相対パスを構築するための共通の慣用句は素晴らしいヒントです!私の問題は解決しました! – passion053

関連する問題