・デスクトップアプリを作ってみたい方
・Pythonを使いって業務効率化アプリを作ってみたい方
など
どうも、こんにちは。コンです。
2023年になっても、相変わらず工場で便利ツールを頼まれる度に量産している日々を送ってます。
皆様はいかがお過ごしでしょうか??
今回は私が普段使っているファイル・フォルダ選択のプログラムについて解説していきたいと思います。
ファイルを開く時
ファイルを開く時には、tkinter.filedialogモジュールのaskopenfilename()関数を使います。
以下が私がよく使うコード
import tkinter as tk
from tkinter import filedialog
import os
home = os.getcwd()
root = tk.Tk()
root.withdraw()
filename = filedialog.askopenfilename(
title = "ファイルを開く",
initialdir = home #開くディレクトリを指定
)
#今回はプリントだけ
print(filename)
askopenfilename()関数を使う前にroot=などをしているのは
Tkinterはルートウィンドウを持たなければならず、ルートウィンドウがない場合、勝手に作成するため
見栄えのために書いております。
(他にウィンドウを勝手に出ないようにする方法があれば教えてください)
オプション
上の段落でも少し書いてしまいましたが、
最初に開くフォルダであったり、選択するファイルの種類を制限するためのオプションも用意されています。
parent | ダイアログをその上に表示するウィンドウ |
title | ウィンドウのタイトル |
initialdir | 最初に表示するディレクトリ |
initialfile | ダイアログを表示した際に選択するファイル |
filetypes | (ラベル, パターン) のタプルからなるシーケンスで、’*’ ワイルドカードが利用できます |
defaultextension | ファイルに追加するデフォルトの拡張子 (保存ダイアログ向け) |
multiple | 真の場合、複数要素の選択を許可します |
なので例えば、複数の画像ファイル(png,jpeg)だけを選択する場合は、以下のようなコードを書きます。
imagefiles=filedialog.askopenfilename(
title = "複数の画像を選択",
initialdir = home, #開くディレクトリを指定
filetypes = {("Image file", ".png .jpg"), ("PNG", ".png"), ("JPEG", ".jpg")}, # pngとjpegを指定
multiple =True
)
#今回はプリントだけ
print(imagefiles)
フォルダを開くとき
フォルダを開く時には、Tkinter.filedialogモジュールのaskdirectory()関数を使います。
基本的にはファイルを開くときのaskopenfilename()関数と同じ
以下が私がよく使うコード
import tkinter as tk
from tkinter import filedialog
import os
home = os.getcwd()
root = tk.Tk()
root.withdraw()
foldername = filedialog.askdirectory(
title = "ファイルを開く",
initialdir = home)
print(foldername)
使いどき
私が上記のようなコードを書く時は、色々な人に使ってもらいたいデスクトップアプリを書いた時です。
例えばPDFファイル編集や画像の編集プログラムを書いても
編集ファイルやフォルダの指定方法が面倒だと、使われないことが多いので
このコードを書くようになりました。
昔はinput関数を使っていたのですが
コマンドプロンプトよりも、ウィンドウ(ダイアログ?)がでる方が職場の皆様の安心感があるそうで
今ではこちらを多く使うようになりました。
おわりに
ここまで読んでくださり、ありがとうございます。
このブログを読んでくださっている方は
おそらくweb系ではなく、製造だったり事務系な方が多いと思いますので
そんな方にこの記事が読んでいただければ幸いです。
最近読んだ本だと「Pythonではじめるデスクトップアプリ開発入門」が
業務効率化を目指すPython初学者にとって、親切に書かれていたのでおすすめになります。
ここまで読んでいただいてありがとうございました。
通りすがりです。はじめまして。
簡潔、明瞭、便利な記事で大変助かりました。
vb.netの旧態依然とした社内システムを保守している身としては、このような情報が公開されているのは大変ありがたいことと思います。