Image renameing tool from alphabetical order to numerical order
Here you can slect a particular image or whole folder to rename them in numerical order from alphabetical order.
Source code:
import os
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
class PhotoRenamer:
def _init_(self, root):
self.root = root
self.root.title("Student Photo Serial Renamer (2026)")
self.root.geometry("600x400")
self.selected_files = [] # Stores full paths of images to rename
self.start_num_var = tk.StringVar(value="1")
self.create_widgets()
def create_widgets(self):
main_frame = ttk.Frame(self.root, padding="20")
main_frame.pack(fill="both", expand=True)
# 1. Selection Buttons
ttk.Label(main_frame, text="1. Choose Your Photos:", font=('Helvetica', 10, 'bold')).grid(row=0, column=0, sticky="w", pady=5)
btn_frame = ttk.Frame(main_frame)
btn_frame.grid(row=1, column=0, columnspan=2, sticky="w")
ttk.Button(btn_frame, text="Select Folder (All JPGs)", command=self.browse_folder).pack(side="left", padx=5)
ttk.Button(btn_frame, text="Select Specific Images", command=self.browse_images).pack(side="left", padx=5)
# 2. File List Display
ttk.Label(main_frame, text="Selected Files:").grid(row=2, column=0, sticky="w", pady=(15, 5))
self.file_listbox = tk.Listbox(main_frame, height=8, width=70)
self.file_listbox.grid(row=3, column=0, columnspan=2, sticky="ew")
# 3. Rename Settings
settings_frame = ttk.Frame(main_frame)
settings_frame.grid(row=4, column=0, sticky="w", pady=15)
ttk.Label(settings_frame, text="Starting Serial Number:").pack(side="left")
ttk.Entry(settings_frame, textvariable=self.start_num_var, width=10).pack(side="left", padx=10)
# 4. Action Button
self.run_btn = ttk.Button(main_frame, text="RENAME NOW", command=self.start_renaming, state="disabled")
self.run_btn.grid(row=5, column=0, columnspan=2, pady=10)
def update_listbox(self):
self.file_listbox.delete(0, tk.END)
# Sort files alphabetically by their filename (not full path) before displaying
self.selected_files.sort(key=lambda x: os.path.basename(x).lower())
for f in self.selected_files:
self.file_listbox.insert(tk.END, os.path.basename(f))
if self.selected_files:
self.run_btn.config(state="normal")
else:
self.run_btn.config(state="disabled")
def browse_folder(self):
folder = filedialog.askdirectory()
if folder:
# Get all JPG/JPEG files from that folder
self.selected_files = [os.path.join(folder, f) for f in os.listdir(folder)
if f.lower().endswith(('.jpg', '.jpeg'))]
self.update_listbox()
def browse_images(self):
files = filedialog.askopenfilenames(filetypes=[("Image files", "*.jpg *.jpeg")])
if files:
self.selected_files = list(files)
self.update_listbox()
def start_renaming(self):
try:
start_num = int(self.start_num_var.get())
except ValueError:
messagebox.showerror("Error", "Please enter a valid starting number.")
return
if not messagebox.askyesno("Confirm", f"Rename {len(self.selected_files)} images?"):
return
success_count = 0
try:
# Use a temporary list to avoid conflicts during renaming
for index, old_path in enumerate(self.selected_files):
directory = os.path.dirname(old_path)
extension = os.path.splitext(old_path)[1]
# Create the new filename (e.g., 1.jpg, 2.jpg)
# Tip: use f"{start_num + index:03}{extension}" for leading zeros (001, 002)
new_filename = f"{start_num + index}{extension}"
new_path = os.path.join(directory, new_filename)
# Rename the file
os.rename(old_path, new_path)
success_count += 1
messagebox.showinfo("Done", f"Successfully renamed {success_count} images!")
self.selected_files = [] # Clear list after completion
self.update_listbox()
except Exception as e:
messagebox.showerror("System Error", f"Failed to rename: {e}")
if __name__ == "_main_":
root = tk.Tk()
app = PhotoRenamer(root)
root.mainloop()
Comments
Post a Comment