あらかじめ処理対象のファイルが分かっている場合を除き、CUIだとファイルの指定はちょっとのタイプミスでもエラーになってしまい、手間がかかります。
そんな時は、tkinterのファイルダイアログやメッセージボックスを使うと、マウスで操作できるので、直感的に誰でも使えるようにスクリプトを作成できます。
準備
ファイルダイアログやメッセージボックスだけを利用する場合、以下のようにすると実行時に余計な画面が表示されなくなります。
import tkinter
tk = tkinter.Tk()
tk.withdraw()
ファイルダイアログ
引数のオプション等についてはtkinterがインストールされているフォルダ(c:\users[ユーザー名]\appdata\local\programs\python\python35\lib\tkinter\)の「filedialog.py」で確認できます。
操作内容 | 使い方 | 返り値(キャンセルは、「''」もしくは「None」) |
---|---|---|
モジュールインポート | import tkinter.filedialog as tkfd | |
フォルダ読み込み | tkfd.askdirectory() | 指定フォルダパス(str) |
ファイル読み込み | tkfd.askopenfile() | ファイルオブジェクト |
ファイル読み込み(複数) | tkfd.askopenfiles() | ファイルオブジェクトのリスト |
読み込みファイル名取得 | tkfd.askopenfilename() | ファイルパス(str) |
読み込みファイル名取得(複数) | tkfd.askopenfilenames() | ファイルパス(タプル) |
書き込みファイル名取得 | tkfd.asksaveasfile() | ファイルオブジェクト |
保存先ファイル名フルパス取得 | tkfd.asksaveasfilename() | ファイルパス(str) |
メッセージボックス
引数のオプション等についてはtkinterがインストールされているフォルダ(c:\users[ユーザー名]\appdata\local\programs\python\python35\lib\tkinter\)の「messege.py」で確認できます。
表示ウィンドウ | 使い方 | 返り値 |
---|---|---|
モジュールインポート | import tkinter.messagebox as tkmsg | |
「OK」「キャンセル」 | tkmsg.askokcancel() | OK : True キャンセル : False |
「はい」「いいえ」 | tkmsg.askquestion() | はい : 'yes' いいえ : 'no' |
「再試行」「キャンセル」 | tkmsg.askretrycancel() | 再試行 : True キャンセル : False |
「はい」「いいえ」 | tkmsg.askyesno() | はい : True いいえ : False |
「はい」「いいえ」「キャンセル」 | tkmsg.askyesnocancel() | はい : True いいえ : False キャンセル : None |
エラー表示 | tkmsg.showerror() | 'ok' |
情報表示 | tkmsg.showinfo() | 'ok' |
警告表示 | tkmsg.showwarning() | 'ok' |
「askretrycancel」「askyesnocancel」「showerror」の例
引数は「(title="title", message="message")」を指定
pyautoguiの場合
pyautoguiにもメッセージボックスを表示する機能が確認できたのでまとめました。
ウィンドウ種類 | 使い方 | 返り値 |
---|---|---|
インポート | import pyautogui | |
警告 | pyautogui.alert(text='', title='', button='OK') | buttonに指定した文字列 |
確認 | pyautogui.confirm(text='', title='', buttons=['OK', 'Cancel']) | buttonsに指定した文字列のいずれか |
入力 | pyautogui.prompt(text='', title='' , default='') | 入力文字 |
パスワード入力 | pyautogui.password(text='', title='', default='', mask='*') | 入力文字 |
実行例と返り値の結果は下記の通りです。