適当のごった煮

Pythonと境界標とQGISを中心にいろいろと

tkinterでファイルダイアログとメッセージボックスを使う

スポンサードリンク

あらかじめ処理対象のファイルが分かっている場合を除き、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")」を指定
f:id:tekito-gottani:20170203223943j:plain

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='*') 入力文字

実行例と返り値の結果は下記の通りです。

f:id:tekito-gottani:20181112223133j:plain

f:id:tekito-gottani:20181112223147j:plain

参考