用python编程制作定时关机应用

话不多说,也是直接上个代码上来好吧:

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()


 

  • 14
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2201_75396384

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值