えいあーるれいの技術日記

ROS2やM5 Stack、Ubuntuについて書いています

Bash実行中にフォルダ選択を行うGUI(PyQt5版)

以前投稿した記事「Bash実行中にフォルダ選択を行うGUI」の続きです。

ar-ray.hatenablog.com

以前、フォルダを選択するだけのGUIを作成したことで、GUIを作成する手間を省きつつ扱いやすいインストールスクリプトを作ることができました。しかし、少し問題が…

GUIが使いにくい!!!

tkinterではどうしても乗り越えられない壁の一つにGUIデザインが挙げられます。

f:id:Ray_ar:20220214004112p:plain


そこで、いつも見慣れているGUIでファイルやフォルダ選択を行うためにQtのQFileDialogクラスを使用することにしました。

このプログラムは「ウララ検出チャレンジ」のファイル選択に使用しました。

以下のURLから該当のリポジトリに飛びます。

github.com

select-file-folder-dialog-PyQt5のリポジトリのURLは以下から↓

github.com

コード

…といっても、PyQttkinterの記法はほぼ同じである上に内容も非常にシンプルなので、あまり書き換えるポイントは多くありません。

tkinter実装時と異なり、--titleオプションを追加しました。csvファイル選択中なのかビデオファイル選択中なのかが紛らわしいということに気づいて、タイトルを編集するオプションを追加しました。

#!/bin/python3
# ===========================
# Ar-Ray-code 2022
# ===========================

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

class Application(QWidget):
    def __init__(self):
        super().__init__()

        parser = argparse.ArgumentParser(description='Select folder')
        parser.add_argument('-e', '--entry', help='entry point folder')
        parser.add_argument('-f', '--file', help='Using file dialog.', action='store_true')
        parser.add_argument('-t', '--title', help='title of dialog', default='Select folder or file')
        args = parser.parse_args()

        self.file_flag = args.file
        self.entry = args.entry
        self.title = args.title

        self.create_widgets()

    def create_widgets(self):

        if(self.file_flag==True):
            selected_usb_device = QFileDialog.getOpenFileName(self, self.title, self.entry)[0]
        else:
            selected_usb_device = QFileDialog.getExistingDirectory(self, self.title, self.entry)
        
        print(selected_usb_device)
        sys.exit(0)
        

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ex = Application()

良さそう!フォーマット選択などのオプションも必要に応じて追加したいです。

f:id:Ray_ar:20220214004823p:plain