PySideでファイルダイアログ起動してパス取得する方法・コード例

主にPySide2での場合です。

次のようなことを実現したかった

  • 複数のファイルを選択させる
  • 単一のファイルを選択させる
  • それらファイルパスを取得したい

これはQFileDialogを使えば簡単にできます。

しかも同期的に処理ができるので、
SLOT関数とかも用意する必要ありません。

そこでQFileDialogの基本的な使い方

それを色々まとめてみたいと思います

PySide・PyQtのどちらでも有効な方法だと思う

まず僕自身のGUI開発の環境について

▼ このような環境

  • PySide2(PySide6)を使用
  • minicondaで仮想環境作成

▼ PySide環境構築は次記事でもまとめた

ライセンス的にPyQtは使いたくありません。

それだから互換性のあるPySideを使ってる訳です。

ただしこれから紹介するファイルダイアログの出し方。

それはPySide・PyQtでほぼ変わらないはずです。

QFileDialogから単一ファイルパスを取得するコード例

初めは単一ファイルの選択・パス取得から

実際にコードを書いてみました。

▼ 1つだけファイル選択するコード例(画像のみ)

▼ 適当なPNG画像を選択時の出力結果

「 QFileDialog.getOpenFileName() 」

これを使えば単一ファイル取得できます。

5つの引数を取り、それぞれ次の意味を持ちます。

  • caption
    ファイルダイアログのタイトルバーに表示されるテキスト
  • dir
    ファイルダイアログ起動時に移動したい初期ディレクトリパス。基本的に必要ないと思う。もし必要ないなら空文字列を渡しておけばOK
  • filter
    絞込みフィルター。構文は [ヒントテキスト] (*.[拡張子1] *.[拡張子2] ...)  のような形式。この例では *.png *.jpeg  とすることで画像のみをフィルターしている
  • selectedFilter
    詳細はリファレンスを見た多だけではわからなかった。初期状態で選択されているファイルを指定する時などに使うのかな?詳しく知りたい人はググってほしい
  • options
    なんか色々。オプション

大事なのは filter の引数ですね。

ここでは "Images (*.png *.jpg)"  と指定してPNG/JPEG画像だけ選択させてます。もしテキスト形式だけ受け付けたいなら "Text files (*.txt)"  みたいに指定できます。

QFileDialogから複数ファイルパスの取得コード例

次は複数ファイルの場合

単一ファイルの場合とさほど変わりないです。

▼ 例えばこのようなコード

▼ 5つほどファイル選択した時の出力結果

「 QFileDialog.getOpenFileNames() 」

今度はこのメソッドを使います。

といっても引数は getOpenFileName()  と変わりません。

拡張子でファイル種類をフィルターできるし、タイトルキャプションとか初期ディレクトリ変更のやり方も全く同じです。

違いはファイルパス配列が返ることだけです。

ファイルダイアログはOSネイティブが起動される

起動するファイルダイアログはOSネイティブです。

▼ Windowsだったらいつものが起動する

QFileDialogのWindowsでの起動例。WINユーザーなら見飽きたくらい見てるダイアログが表示される

ネイティブだから違和感もありません。

ということでPySideでのファイルダイアログの出し方でした。

PySideでも頻繁に使うことになるAPIだと思います。ではまた