话不多说,也是直接上个代码上来好吧:
import tkinter as tk
from tkinter import ttk
import subprocess
def shutdown():
try:
hours = int(hours_var.get()) if hours_var.get() else 0
minutes = int(minutes_var.get()) if minutes_var.get() else 0
seconds = int(seconds_var.get()) if seconds_var.get() else 0
if hours < 0 or minutes < 0 or seconds < 0:
raise ValueError("时间不能为负数")
total_seconds = hours * 3600 + minutes * 60 + seconds
if total_seconds <= 0:
raise ValueError("请输入有效的时间")
subprocess.run(["shutdown", "/s", "/t", str(total_seconds)])
status_label.config(text="定时关机已启动", foreground="green")
update_countdown(total_seconds)
except ValueError as e:
status_label.config(text=str(e), foreground="red")
def restart():
try:
hours = int(restart_hours_var.get()) if restart_hours_var.get() else 0
minutes = int(restart_minutes_var.get()) if restart_minutes_var.get() else 0
seconds = int(restart_seconds_var.get()) if restart_seconds_var.get() else 0
if hours < 0 or minutes < 0 or seconds < 0:
raise ValueError("时间不能为负数")
total_seconds = hours * 3600 + minutes * 60 + seconds
if total_seconds <= 0:
raise ValueError("请输入有效的时间")
subprocess.run(["shutdown", "/r", "/t", str(total_seconds)])
restart_status_label.config(text="定时重启已启动", foreground="green")
except ValueError as e:
restart_status_label.config(text=str(e), foreground="red")
def cancel_shutdown():
subprocess.run(["shutdown", "/a"])
status_label.config(text="定时关机已取消", foreground="blue")
def cancel_restart():
subprocess.run(["shutdown", "/a"])
restart_status_label.config(text="定时重启已取消", foreground="blue")
def update_countdown(total_seconds):
hours = total_seconds // 3600
minutes = (total_seconds % 3600) // 60
seconds = total_seconds % 60
countdown_label.config(text=f"还剩 {hours:02d} 小时 {minutes:02d} 分钟 {seconds:02d} 秒关机")
if total_seconds > 0:
countdown_label.after(1000, update_countdown, total_seconds - 1)
else:
countdown_label.config(text="")
root = tk.Tk()
root.title("定时关机应用")
style = ttk.Style()
style.configure("TLabel", foreground="black", font=("Arial", 12))
style.configure("TButton", font=("Arial", 12))
shutdown_label = ttk.Label(root, text="关机时间:")
shutdown_label.grid(row=0, column=0, padx=5, pady=5, sticky="e")
hours_var = tk.StringVar()
hours_entry = ttk.Entry(root, textvariable=hours_var, width=5)
hours_entry.grid(row=0, column=1, padx=5, pady=5)
minutes_var = tk.StringVar()
minutes_entry = ttk.Entry(root, textvariable=minutes_var, width=5)
minutes_entry.grid(row=0, column=2, padx=5, pady=5)
seconds_var = tk.StringVar()
seconds_entry = ttk.Entry(root, textvariable=seconds_var, width=5)
seconds_entry.grid(row=0, column=3, padx=5, pady=5)
shutdown_button = ttk.Button(root, text="启动定时关机", command=shutdown)
shutdown_button.grid(row=0, column=4, padx=5, pady=5, sticky="w")
cancel_shutdown_button = ttk.Button(root, text="取消定时关机", command=cancel_shutdown)
cancel_shutdown_button.grid(row=0, column=5, padx=5, pady=5, sticky="w")
restart_label = ttk.Label(root, text="重启时间:")
restart_label.grid(row=1, column=0, padx=5, pady=5, sticky="e")
restart_hours_var = tk.StringVar()
restart_hours_entry = ttk.Entry(root, textvariable=restart_hours_var, width=5)
restart_hours_entry.grid(row=1, column=1, padx=5, pady=5)
restart_minutes_var = tk.StringVar()
restart_minutes_entry = ttk.Entry(root, textvariable=restart_minutes_var, width=5)
restart_minutes_entry.grid(row=1, column=2, padx=5, pady=5)
restart_seconds_var = tk.StringVar()
restart_seconds_entry = ttk.Entry(root, textvariable=restart_seconds_var, width=5)
restart_seconds_entry.grid(row=1, column=3, padx=5, pady=5)
restart_button = ttk.Button(root, text="启动定时重启", command=restart)
restart_button.grid(row=1, column=4, padx=5, pady=5, sticky="w")
cancel_restart_button = ttk.Button(root, text="取消定时重启", command=cancel_restart)
cancel_restart_button.grid(row=1, column=5, padx=5, pady=5, sticky="w")
status_label = ttk.Label(root, text="", font=("Arial", 12))
status_label.grid(row=2, column=0, columnspan=6, padx=5, pady=5, sticky="we")
countdown_label = ttk.Label(root, text="", font=("Arial", 12))
countdown_label.grid(row=3, column=0, columnspan=6, padx=5, pady=5, sticky="we")
restart_status_label = ttk.Label(root, text="", font=("Arial", 12))
restart_status_label.grid(row=4, column=0, columnspan=6, padx=5, pady=5, sticky="we")
root.mainloop()