【第13回PYTHON講座】フォルダのファイル名を変更するプログラムの作成②

PYTHON

前回はフォルダにあるファイル名の変更(連番)するプログラムを作成しました。

今回はそのプログラムをGUIで作ってみたいと思います。

前回は画像の保存先フォルダをプログラムに直接指定しましたが、今回はGUIなので、tkinterのフォルダ参照のウインドウで保存先フォルダを指定します。画像ファイルはjpg、pngと2種類あると想定し、選ばれたファイル形式のファイルのみ連番にファイル名を変更するようにします。

では、始めてみましょう。

スポンサーリンク

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を代わりに入れておきます。

tkinterで外観を作成

フォルダ参照:filedialog

フォルダを参照するために、tkinterfiledialogを使用します。

プログラムに下記を加え、フォルダ参照ボタンのコマンドを修正しました。

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をファイル参照の為のfiledialogtkinterからインポートします。

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でフォルダ名を選ぶことが出来るので、前回のプログラムよりは汎用性が出来ました。

今回のものは、最低限の機能しかを備えていません。よって、次回は、このプログラムに条件文を加えていきます。例えば、フォルダ名が選ばれない時にはプログラムが動作しないことを告げるメッセージを出す等です。よりプログラムらしくなってきますので、楽しみにして下さい。

コメント

タイトルとURLをコピーしました