PythonでPyQt5を使用しQFileDialogウィジェットのgetOpenFileNameダイアログを作成する

PythonでPyQt5を使用しQFileDialogウィジェットのgetOpenFileNameダイアログを作成してみます。

QFileDialogウィジェットは、ユーザーにファイルを開けるように指示するダイアログが作成できます。ダイアログには、さまざまなダイアログがあります。その中でも今回はgetOpenFileNameダイアログを使ってみます。

今回はPyQt5を使用します。PyQt5はPythonの標準ライブラリではないので、事前にインストールする必要があります。

■Python

今回のPythonのバージョンは、「3.8.5」を使用しています。(Windows10)(pythonランチャーでの確認)

■getOpenFileNameダイアログを作成する

では、早速PyQt5を使用しQFileDialogウィジェットのgetOpenFileNameダイアログを作成し表示させるスクリプトを書いていきます。

■コード

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget

def dialog_test():
    file,check = QtWidgets.QFileDialog.getOpenFileName(None,"ファイルを選択してください。","","All Files (*);;Python Files (*.py);;Text Files (*.txt)")

    if check:
        print(file)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    root = QWidget()
    root.resize(300,300)
    root.setWindowTitle('こんにちは、世界')

    button = QtWidgets.QPushButton(root)
    button.setText("ファイルを選択する")
    button.clicked.connect(dialog_test)
    button.move(50,50)

    root.show()
    sys.exit(app.exec_())
    

今回はsysモジュールと、importでPyQt5でQtWidgets、「from import」でPyQt5.QtWidgetsのQApplication,QWidgetを呼び出します。

呼び出した後に、getOpenFileNameダイアログを表示させるので、def文を用いて、dialog_test()という関数を定義します。今回の関数を呼び出した時の処理は、file,checkという変数を定義し、QtWidgets.QFileDialog.getOpenFileName()を用いて、QFileDialogウィジェットのgetOpenFileNameダイアログを作成します。括弧内には引数,パラメータとして、ダイアログのタイトルや選択するファイルの種類のフィルターなどを渡します。

その後、if文を用いて、checkが真(True)の時に実行する処理を書いていきます。今回の処理は、print()を用いて、file変数(ファイルパス)を出力させるというものです。

その後に「if __name__ == ‘__main__’」で関数などをまとめたモジュールを作成します。

作成する内容は、app変数を定義し、QApplication()を用いて、QApplicationクラスのオブジェクトを作成し格納。格納後、root変数を定義し、QWidget()を用いてQWidgetクラスのオブジェクトを作成し格納。これはQtのすべてのUIオブジェクトの基本クラス。

格納後、resize()を用いて括弧内に任意のウィジェット(ウインドウ)のサイズを渡します。今回は300px×300pxを引数,パラメータとして渡します。

さらにsetWindowTitle()を用いて括弧内に表示させるウィンドウのタイトル(文字列)を渡します。今回は「こんにちは、世界」という日本語の文字列を引数,パラメータとして渡します。

ウィンドウのタイトルの設定を行った後に、button変数を定義し、QPushButtonウィジェットを作成し、dialog_test()で表示させるテキスト(文字列)を指定し、clicked.connect()を用いてウィジェットをクリックした後に、show()関数を呼び出し処理を実行するようにします。ウィジェットの表示位置は、move()を用いて指定します。

その後、show()を用いてウィジェット(ウインドウ)をモニター画面に表示させます。

最後にsys.exit(app.exec_())を用います。app.exec_()は、イベントのループを開始させることができます。さらにQtに制御を渡し、ユーザーがGUIからアプリケーションを閉じた時のみ、アプリケーションを終了となりますので、途中でイベントが終了することはありません。このsys.exit(app.exec_())を用いずに、実行すると、ウインドウがすぐに閉じてしまいます。

■実行・検証

このスクリプトを「filedialog_test.py」という名前で、Pythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

実行してみると、ウインドウ内にQPushButton(ボタン)ウィジェットが表示されました。このウィジェットをクリックしてみます。

クリックすると、getOpenFileNameダイアログを表示させることができました。ダイアログ内のファイルタイプ(種類)を確認すると、QtWidgets.QFileDialog.getOpenFileName()を用いて引数,パラメータとして渡したファイルタイプ(種類)が表示されていることが確認できました。

確認後、実際に仮でファイルを選択し「開く」ボタンをクリックすると、コマンドプロンプト上に選択したファイルのパスが出力されることも確認できました。

コメント

タイトルとURLをコピーしました