【Python×Tkinter】パス指定ではなくGUIでファイルを選択する方法
はじめに
普段Pythonで何かファイルを操作するとき、ディレクトリを移動したりパスを指定してファイルを読み込むことが多いと思います。しかし自分が作ったプログラムを他人(非プログラマー)が使うとなったら、人によっては自分でコードを書き換えてパスを変えるとか難しいですよね。また自分で使うにしても、読み込むファイルが毎日変わるものであればいちいちコードを書き換えるのは面倒ですよね。
そんな方のために今回はGUIからファイルを選択できるようにする方法を解説します。
準備
import tkinter
import tkinter.filedialog
import tkinter.messagebox
import os
import tkinter
import tkinter.filedialog
import tkinter.messagebox
import os
Tkinterというライブラリを使っていきます。読み方は「ティーキンター」です。
PythonのGUI系ライブラリの中ではかなり有名で、よく使われているものだと思います。
ちなみにTkinterだけインポートしてもファイルダイアログとメッセージボックスは使えないので、この2つもtkinter単体とは別にインポートします。あとエクスプローラーを利用するため、ディレクトリ移動できるようにosもimportします。
ファイルをインポート
root = tkinter.Tk()
root.withdraw()
root = tkinter.Tk()
root.withdraw()
rootはTkinterにおけるいわゆるウィンドウを作る働きをします。最初のroot = tkinter.TK()でまさにウィンドウを生成しています。しかしその際に空の小さなウィンドウも出てきてしまいます。この小さいウィンドウは使わないので、root.withdraw()で非表示にします。
root.attributes('-topmost', True)
root.lift()
root.focus_force()
またこれは好みによりますが、ウィンドウが他のアプリやブラウザのページに隠れてしまうのが嫌という方は、root.attributes('-topmost', True)とroot.lift()を使いましょう。ウィンドウが常に最前面に来ます。またその際にroot.focus_force()も書いてあげると、ウィンドウにフォーカルが当たります。
fTyp = [("","*")]
iDir = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('Qiita','ファイルを選択下ください')
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
# Show file name
tkinter.messagebox.showinfo('Qiita',file)
fTyp = [("","*")]はアスタリスクを指定することで全種類のファイルを選択できるようにしていますが、もし特定の拡張子のファイルだけ取得したいときはアスタリスクのところにtxtやxlsxなど取得したい拡張子を入れてください。
iDir = os.path.abspath(os.path.dirname(file))は、実行中のファイルのパスを取得します。そしてここで取得したパスをもとに、エクスプローラーで選択したファイルのパスが
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)で取得されます。
2つあるmessageboxは、任意のメッセージを2つ目の引数で指定できます。ちなみに1つ目の引数に入力したものはウィンドウのタイトルになるので、アプリの名前などにしておくとよいでしょう。
実行結果は下記のようになります。
ファイル選択ダイアログメッセージ
コード全体としては下記のようになります。
# Select file
root = tkinter.Tk()
root.withdraw()
root.attributes('-topmost', True)
root.lift()
root.focus_force()
fTyp = [("","*")]
iDir = os.path.abspath(os.path.dirname(__file__))
tkinter.messagebox.showinfo('Qiita','ファイルを選択下ください')
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
# Show file name
tkinter.messagebox.showinfo('Qiita',file)
参考にした記事
今回は下記の記事を参考にサンプルコードを書いてみました。
ちなみにウィンドウを最前面に持ってくるコードとメッセージボックス以外は、この記事のサンプルコードを引用させていただいております。
『Python:処理ファイルをGUIから選択する方法』https://qiita.com/666mikoto/items/1b64aa91dcd45ad91540
Author And Source
この問題について(【Python×Tkinter】パス指定ではなくGUIでファイルを選択する方法), 我々は、より多くの情報をここで見つけました https://qiita.com/djyokochan/items/67c3b12b907ddf14dabf著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .