RiskScan – Professional File & Folder Risk Scanner

Breaking News

MateTools - Countdown Timer (Python Tkinter)


MateTools - Countdown Timer (Python Tkinter)

Here is a complete Python GUI countdown timer using Tkinter and sv_ttk. It features:

  • Flexible timer input (hours, minutes, seconds)
  • Start, Pause, and Reset buttons
  • Dark / Light mode toggle
  • Live countdown display

Copy the code below and run it in any Python environment with Tkinter installed.


import sys
import os
import tkinter as tk
from tkinter import ttk, messagebox
import sv_ttk

# =========================
# App Setup
# =========================
root = tk.Tk()
root.title("MateTools - Countdown Timer")
root.geometry("900x500")
# Optional: root.iconbitmap("logo.ico")  # if you have an icon

sv_ttk.set_theme("light")  # Default theme

# =========================
# Globals
# =========================
timer_running = False
hours_var = tk.StringVar(value="0")
minutes_var = tk.StringVar(value="0")
seconds_var = tk.StringVar(value="0")
time_left_var = tk.StringVar(value="00:00:00")
dark_mode_var = tk.BooleanVar(value=False)

# =========================
# Helpers
# =========================
def set_status(msg):
    status_var.set(msg)
    root.update_idletasks()

def toggle_theme():
    style.theme_use("clam")
    if dark_mode_var.get():
        root.configure(bg="#2E2E2E")
        style.configure("TLabel", background="#2E2E2E", foreground="white")
        style.configure("TFrame", background="#2E2E2E")
        style.configure("TLabelframe", background="#2E2E2E", foreground="white")
        style.configure("TCheckbutton", background="#2E2E2E", foreground="white")
        style.configure("TNotebook", background="#2E2E2E")
        style.configure("TNotebook.Tab", background="#444444", foreground="white")
        style.map("TNotebook.Tab", background=[("selected", "#90caf9")], foreground=[("selected", "black")])
    else:
        root.configure(bg="#FFFFFF")
        style.configure("TLabel", background="#FFFFFF", foreground="black")
        style.configure("TFrame", background="#FFFFFF")
        style.configure("TLabelframe", background="#FFFFFF", foreground="black")
        style.configure("TCheckbutton", background="#FFFFFF", foreground="black")
        style.configure("TNotebook", background="#FFFFFF")
        style.configure("TNotebook.Tab", background="#e0e0e0", foreground="black")
        style.map("TNotebook.Tab", background=[("selected", "#90caf9")], foreground=[("selected", "black")])
    set_status(f"Theme switched to {'Dark' if dark_mode_var.get() else 'Light'} mode")

# =========================
# Custom Styles
# =========================
style = ttk.Style()
style.theme_use("clam")
style.configure("Action.TButton", font=("Segoe UI", 11, "bold"),
                foreground="white", background="#4CAF50", padding=8)
style.map("Action.TButton", background=[("active", "#45a049"), ("disabled", "#a5d6a7")])
style.configure("Reset.TButton", font=("Segoe UI", 11, "bold"),
                foreground="white", background="#f44336", padding=8)
style.map("Reset.TButton", background=[("active", "#d32f2f"), ("disabled", "#ef9a9a")])

# =========================
# Status Bar
# =========================
status_var = tk.StringVar(value="Ready")
ttk.Label(root, textvariable=status_var, anchor="w", font=("Segoe UI", 10)).pack(side=tk.BOTTOM, fill="x")

# =========================
# Notebook
# =========================
tabs = ttk.Notebook(root)
tabs.pack(expand=True, fill="both", padx=20, pady=20)

# =========================
# Dashboard Tab
# =========================
dash_tab = ttk.Frame(tabs, padding=20)
tabs.add(dash_tab, text="🏠 Dashboard")

ttk.Label(dash_tab, text="MateTools - Countdown Timer",
          font=("Segoe UI", 20, "bold")).pack(anchor="w")
ttk.Label(dash_tab, text="A simple, modern countdown timer tool with flexible input and live display.",
          font=("Segoe UI", 11)).pack(anchor="w", pady=(5,15))

ttk.Label(dash_tab, text="Key Features:", font=("Segoe UI", 13, "bold")).pack(anchor="w", pady=(10,5))
features_frame = ttk.Frame(dash_tab)
features_frame.pack(fill="x", pady=5)

def create_feature_card(parent, title, desc):
    card = ttk.LabelFrame(parent, text=title, padding=15)
    ttk.Label(card, text=desc, wraplength=250, font=("Segoe UI", 10)).pack(anchor="w")
    return card

create_feature_card(features_frame, "⏱ Flexible Timer Input",
                    "Set hours, minutes, and seconds easily.").grid(row=0, column=0, padx=10, pady=10, sticky="nsew")
create_feature_card(features_frame, "▶️ Start / ⏸ Pause / 🔄 Reset",
                    "Control your countdown easily with intuitive buttons.").grid(row=0, column=1, padx=10, pady=10, sticky="nsew")
create_feature_card(features_frame, "🌙 Dark / Light Mode",
                    "Switch themes to match your preference.").grid(row=0, column=2, padx=10, pady=10, sticky="nsew")
features_frame.columnconfigure((0,1,2), weight=1)

ttk.Label(dash_tab, text="About This Tool", font=("Segoe UI", 13, "bold")).pack(anchor="w", pady=(15,5))
about_text = (
    "MateTools Countdown Timer is built for productivity and simplicity. "
    "It allows you to set a countdown for any task, keep track of remaining time, "
    "and customize your experience with light/dark mode. "
    "\n\nBuilt by MateTools - https://matetools.gumroad.com"
)
ttk.Label(dash_tab, text=about_text, wraplength=850, justify="left", font=("Segoe UI", 10)).pack(anchor="w")

# =========================
# Timer Tab
# =========================
timer_tab = ttk.Frame(tabs, padding=20)
tabs.add(timer_tab, text="⏱ Countdown Timer")

# Timer Logic
def update_timer_display():
    time_left_var.set(f"{int(hours_var.get()):02d}:{int(minutes_var.get()):02d}:{int(seconds_var.get()):02d}")

def countdown():
    global timer_running
    if not timer_running:
        return
    try:
        h = int(hours_var.get())
        m = int(minutes_var.get())
        s = int(seconds_var.get())
    except ValueError:
        messagebox.showerror("Invalid Input", "Please enter valid integers for hours, minutes, and seconds.")
        timer_running = False
        return
    total_seconds = h*3600 + m*60 + s
    if total_seconds <= 0:
        timer_running = False
        messagebox.showinfo("Time's up!", "Countdown finished.")
        return
    total_seconds -= 1
    hours_var.set(str(total_seconds // 3600))
    minutes_var.set(str((total_seconds % 3600) // 60))
    seconds_var.set(str(total_seconds % 60))
    update_timer_display()
    root.after(1000, countdown)

def start_timer():
    global timer_running
    timer_running = True
    countdown()
    set_status("Countdown started.")

def pause_timer():
    global timer_running
    timer_running = False
    set_status("Countdown paused.")

def reset_timer():
    global timer_running
    timer_running = False
    hours_var.set("0")
    minutes_var.set("0")
    seconds_var.set("0")
    update_timer_display()
    set_status("Countdown reset.")

# Timer UI
ttk.Label(timer_tab, text="Countdown Timer", font=("Segoe UI", 20, "bold")).pack(anchor="w", pady=(0,15))
time_frame = ttk.Frame(timer_tab)
time_frame.pack(pady=10)

ttk.Label(time_frame, text="Hours:", font=("Segoe UI", 11)).grid(row=0, column=0, padx=5)
ttk.Entry(time_frame, textvariable=hours_var, width=5, font=("Segoe UI", 12)).grid(row=0, column=1, padx=5)
ttk.Label(time_frame, text="Minutes:", font=("Segoe UI", 11)).grid(row=0, column=2, padx=5)
ttk.Entry(time_frame, textvariable=minutes_var, width=5, font=("Segoe UI", 12)).grid(row=0, column=3, padx=5)
ttk.Label(time_frame, text="Seconds:", font=("Segoe UI", 11)).grid(row=0, column=4, padx=5)
ttk.Entry(time_frame, textvariable=seconds_var, width=5, font=("Segoe UI", 12)).grid(row=0, column=5, padx=5)

ttk.Label(timer_tab, textvariable=time_left_var, font=("Consolas", 40, "bold")).pack(pady=20)

btn_frame = ttk.Frame(timer_tab)
btn_frame.pack(pady=10)
ttk.Button(btn_frame, text="Start", command=start_timer, style="Action.TButton").pack(side="left", padx=5)
ttk.Button(btn_frame, text="Pause", command=pause_timer, style="Action.TButton").pack(side="left", padx=5)
ttk.Button(btn_frame, text="Reset", command=reset_timer, style="Reset.TButton").pack(side="left", padx=5)
ttk.Checkbutton(timer_tab, text="Dark Mode", variable=dark_mode_var, command=toggle_theme).pack(pady=15)

# =========================
# Run App
# =========================
update_timer_display()
root.mainloop()

Note: Install sv_ttk via pip install sv-tk if not already installed.

Download or Explore Useful Tools

Check out more useful tools and downloads here: MateTools on Gumroad




No comments