前回はフォルダにあるファイル名の変更(連番)するプログラムを作成しました。
今回はそのプログラムをGUIで作ってみたいと思います。
では、始めてみましょう。
tkinterでGUI外観を作成
まずはtkinterで外観を作ってみましょう。第回のおさらいですね。
import tkinter as tk root = tk.Tk() root.title('ファイル名変更') canvas = tk.Canvas(root, height=350, width=400,bg="#FFFFFF") canvas.pack() lbl = tk.Label(text='基本の名前を決めて下さい', bg="#FFFFFF") lbl.place(x=10, y=10) Entry1= tk.Entry(width=50, bg="#EEEEEE") Entry1.place(x=10, y=45) lbl2 = tk.Label(text='拡張子を選んで下さい', bg="#FFFFFF") lbl2.place(x=10, y=80) var = tk.StringVar() var.set('.jpg') choices = ['.jpg', '.png'] option = tk.OptionMenu(canvas, var, *choices) option.pack(padx=10, pady=10) option.place(x=10, y=115) lbl2 = tk.Label(text='フォルダを選んで下さい', bg="#FFFFFF") lbl2.place(x=10, y=160) folderbtn = tk.Button(canvas, text="フォルダ参照",padx=10, pady=5, command=quit).place(x=10, y=190) cmdbtn = tk.Button(canvas, text="実行",padx=10, pady=5, command=quit).place(x=10, y=300) clsbtn = tk.Button(canvas, text="終了", padx=10, pady=5, fg="red", command=quit).place(x=70, y=300) root.mainloop()
21行目:画像ファイルはjpg、pngはコンボボックスで選択します。
32、36行目:この時点ではフォルダ参照の関数、ファイル名を実行する関数は作成していないので、quitを代わりに入れておきます。
フォルダ参照:filedialog
フォルダを参照するために、tkinterのfiledialogを使用します。
プログラムに下記を加え、フォルダ参照ボタンのコマンドを修正しました。
from tkinter import filedialog foldername = tk.StringVar() def folderselect(): foldername.set(filedialog.askdirectory()) lbl3 = tk.Label(textvariable=foldername) lbl3.place(x=10, y=250) folderbtn = tk.Button(canvas, text="フォルダ参照",padx=10, pady=5, command=folderselect).place(x=10, y=190)
1行目:from tkinter import filedialogをファイル参照の為のfiledialogをtkinterからインポートします。
3行目:フォルダ名をGUIに表示させます。その為、フォルダ名の文字列をtk.StringVar()で宣言します。こうすることによって、フォルダ名を変更すると、GUIに前のフォルダ名が残ることがありません。
5行目:フォルダ名を取得する関数の宣言です。
6行目:filedialog.askdirectory()が呼び出されることによって、フォルダ参照のウインドウが開きます。そしてfoldername.set()によって得た値がfoldernameに保管されます。
7~9行目:フォルダをGUIに表示させます。
11~12行目:フォルダ参照のボタンのcommand=folderselectにします。
プログラムを実行してフォルダを選択すると、フォルダ名がGUIに表示されます。
ファイル名変更の関数を作成
次にファイル名変更の関数を作成します。前回使用した処理部分を利用しましょう。
def filechange(): for count, origin in enumerate(os.listdir(foldername.get())): fileorigin = foldername.get() + '/'+ origin filecount = count + 1 filechange = foldername.get() + '/'+ Entry1.get() + str(filecount) + var.get() os.rename(fileorigin, filechange)
1行目:ファイル名を変更する関数を定義します。
2行目:フォルダ内のファイルをリスト化します。originにはファイル名が保存されます。
3行目:foldername.get()に保存されているフォルダ名はC:/rabbitになります。その為、ファイルの絶対パス名として、フォルダ名とファイル名の間に『/』のフォルダの区切りを入れる必要があります。前回はフォルダ名をプログラム内で『/』まで入力していたので、不要でした。
5行目:Entry1.get()でファイルの基本となる名前を取得します。var.get()で拡張子の値を取得します。
これでGUIベースでファイルを書き換えるプログラムが作成出来ました。
今回のコード
今回のコードは下記になります。
import os import tkinter as tk from tkinter import filedialog root = tk.Tk() root.title('ファイル名変更') canvas = tk.Canvas(root, height=350, width=400,bg="#FFFFFF") canvas.pack() lbl = tk.Label(text='基本の名前を決めて下さい', bg="#FFFFFF") lbl.place(x=10, y=10) Entry1= tk.Entry(width=50, bg="#EEEEEE") Entry1.place(x=10, y=45) lbl2 = tk.Label(text='拡張子を選んで下さい', bg="#FFFFFF") lbl2.place(x=10, y=80) var = tk.StringVar()
var.set('.jpg') choices = ['.jpg', '.png'] option = tk.OptionMenu(canvas, var, *choices) option.pack(padx=10, pady=10) option.place(x=10, y=115) foldername = tk.StringVar() def folderselect(): foldername.set(filedialog.askdirectory()) lbl3 = tk.Label(textvariable=foldername) lbl3.place(x=10, y=250) folderbtn = tk.Button(canvas, text="フォルダ参照",padx=10, pady=5, command=folderselect).place(x=10, y=190) def filechange(): for count, origin in enumerate(os.listdir(foldername.get())): fileorigin = foldername.get() + '/'+ origin filecount = count + 1 filechange = foldername.get() + '/'+ Entry1.get() + str(filecount) + var.get() os.rename(fileorigin, filechange) cmdbtn = tk.Button(canvas, text="実行",padx=10, pady=5, command=filechange).place(x=10, y=300) clsbtn = tk.Button(canvas, text="終了", padx=10, pady=5, fg="red", command=quit).place(x=70, y=300) root.mainloop()
まとめ
GUIでフォルダ名を選ぶことが出来るので、前回のプログラムよりは汎用性が出来ました。
今回のものは、最低限の機能しかを備えていません。よって、次回は、このプログラムに条件文を加えていきます。例えば、フォルダ名が選ばれない時にはプログラムが動作しないことを告げるメッセージを出す等です。よりプログラムらしくなってきますので、楽しみにして下さい。
コメント