用Python加ai写了一个定时关机小工具

2025-03-06 44 0

现在工作需要用到定时关机这个功能,就用python写了一个定时关机小工具,可以设置年月日分秒,然后自己可以设置后显示关机倒计时,也可以取消关机。成品软件在文章底部即可下载(温馨提示:把电脑杀毒关闭掉,软件会误报导致无法运行!!!,这个软件并不会真的让系统关机,所以没有调用系统权限,大家有需要可以自己把源码拿去添加即可!)软件演示图如下:

成品代码:

import tkinter as tk
from tkinter import ttk, messagebox
import datetime
import time
import os

# 初始化窗口
root = tk.Tk()
root.title("定时关机程序")
root.geometry("600x400")

# 创建自适应布局
root.grid_rowconfigure((0, 1, 2, 3, 4, 5, 6, 7, 8), weight=1)
root.grid_columnconfigure((0, 1, 2), weight=1)

# 变量声明
year_var = tk.IntVar(value=datetime.datetime.now().year)
month_var = tk.IntVar(value=datetime.datetime.now().month)
day_var = tk.IntVar(value=datetime.datetime.now().day)
hour_var = tk.IntVar(value=datetime.datetime.now().hour)
minute_var = tk.IntVar(value=datetime.datetime.now().minute)
second_var = tk.IntVar(value=datetime.datetime.now().second)
shutdown_time_text = tk.StringVar(value="请选择关机时间")
countdown_text = tk.StringVar(value="")

# 初始化关机时间
shutdown_time = None

# 定义设置关机时间函数
def set_shutdown_time():
    global shutdown_time
    try:
        year = year_var.get()
        month = month_var.get()
        day = day_var.get()
        hour = hour_var.get()
        minute = minute_var.get()
        second = second_var.get()

        # 创建datetime对象
        shutdown_time = datetime.datetime(year, month, day, hour, minute, second)
        if shutdown_time < datetime.datetime.now():
            raise ValueError("请选择未来的时间")

        shutdown_time_text.set(f"关机时间: {shutdown_time.strftime('%Y-%m-%d %H:%M:%S')}")
        messagebox.showinfo("成功", "关机时间已设置")
        start_countdown()
    except ValueError as e:
        messagebox.showerror("错误", str(e))

# 开始倒计时
def start_countdown():
    global shutdown_time
    while shutdown_time > datetime.datetime.now():
        remaining_time = shutdown_time - datetime.datetime.now()
        countdown_text.set(f"倒计时: {remaining_time}")
        root.update()
        time.sleep(1)
    
    if shutdown_time == datetime.datetime.now():
        shutdown_computer()

# 关闭计算机
def shutdown_computer():
    platform = os.uname().sysname
    if platform == "Darwin":  # MAC平台
        os.system("osascript -e 'tell app \"System Events\" to shut down'")
        messagebox.showinfo("关机", "计算机将在10秒后关闭")
    elif platform == "Windows":  # Windows平台
        os.system("shutdown /s /t 10")
        messagebox.showinfo("关机", "计算机将在10秒后关闭")
    else:
        messagebox.showerror("错误", "不支持的平台")

# 创建年月日分秒输入框
year_label = ttk.Label(root, text="年", font=("Helvetica", 12))
year_label.grid(row=0, column=0, padx=20, pady=10, sticky="e")

year_entry = ttk.Entry(root, textvariable=year_var, width=15)
year_entry.grid(row=0, column=1, padx=20, pady=10)

month_label = ttk.Label(root, text="月", font=("Helvetica", 12))
month_label.grid(row=1, column=0, padx=20, pady=10, sticky="e")

month_entry = ttk.Entry(root, textvariable=month_var, width=15)
month_entry.grid(row=1, column=1, padx=20, pady=10)

day_label = ttk.Label(root, text="日", font=("Helvetica", 12))
day_label.grid(row=2, column=0, padx=20, pady=10, sticky="e")

day_entry = ttk.Entry(root, textvariable=day_var, width=15)
day_entry.grid(row=2, column=1, padx=20, pady=10)

hour_label = ttk.Label(root, text="时", font=("Helvetica", 12))
hour_label.grid(row=3, column=0, padx=20, pady=10, sticky="e")

hour_entry = ttk.Entry(root, textvariable=hour_var, width=15)
hour_entry.grid(row=3, column=1, padx=20, pady=10)

minute_label = ttk.Label(root, text="分", font=("Helvetica", 12))
minute_label.grid(row=4, column=0, padx=20, pady=10, sticky="e")

minute_entry = ttk.Entry(root, textvariable=minute_var, width=15)
minute_entry.grid(row=4, column=1, padx=20, pady=10)

second_label = ttk.Label(root, text="秒", font=("Helvetica", 12))
second_label.grid(row=5, column=0, padx=20, pady=10, sticky="e")

second_entry = ttk.Entry(root, textvariable=second_var, width=15)
second_entry.grid(row=5, column=1, padx=20, pady=10)

# 显示关机时间标签
shutdown_time_label = ttk.Label(root, textvariable=shutdown_time_text, font=("Helvetica", 16))
shutdown_time_label.grid(row=6, column=0, columnspan=3, padx=20, pady=10)

# 显示倒计时标签
countdown_label = ttk.Label(root, textvariable=countdown_text, font=("Helvetica", 16))
countdown_label.grid(row=7, column=0, columnspan=3, padx=20, pady=10)

# 创建设置关机时间按钮
set_button = ttk.Button(root, text="设置关机时间", command=set_shutdown_time, width=30)
set_button.grid(row=8, column=0, columnspan=3, padx=20, pady=10)

# 运行主循环
root.mainloop()

注释程序:

import tkinter as tk  # 导入tkinter模块,用于创建图形用户界面
from tkinter import ttk, messagebox  # 从tkinter中导入ttk和messagebox模块
import random  # 导入随机模块,用于生成随机数

# 初始化窗口
root = tk.Tk()  # 创建主窗口对象
root.title("猜数字游戏")  # 设置窗口标题
root.geometry("600x400")  # 设置窗口尺寸为宽600px,高400px

# 创建自适应布局
# 配置,以便在窗口大小改变时,行和列能够自适应
root.grid_rowconfigure((0, 1, 2, 3, 4, 5, 6, 7), weight=1)
root.grid_columnconfigure((0, 1, 2), weight=1)

# 变量声明
min_var = tk.IntVar(value=1)  # 最小值,默认为1
max_var = tk.IntVar(value=100)  # 最大值,默认为100
guess_var = tk.IntVar()  # 用户猜测的数字
# 生成目标数字,在最小值和最大值之间
target_number = random.randint(min_var.get(), max_var.get())  
result_label_text = tk.StringVar(value="请输入你的猜测")  # 结果标签的文本
last_guess_text = tk.StringVar(value="上一次猜测: 无")  # 上一次猜测的数字

# 定义猜数字函数
def check_guess():
    global target_number  # 声明使用全局变量target_number
    guess = guess_var.get()  # 获取用户输入的猜测数字

    # 检查猜测数字是否在设定范围内
    if guess < min_var.get() or guess > max_var.get():
        # 如果猜测数字小于最小值或大于最大值,弹出警告
        messagebox.showwarning("警告", f"请输入一个在{min_var.get()}到{max_var.get()}之间的数字")
        return  # 结束函数

    last_guess_text.set(f"上一次猜测: {guess}")  # 更新上一次猜测的数字显示

    # 判断猜测结果
    if guess < target_number:  # 猜测小于目标数字
        result_label_text.set("数字小了哟")  # 更新结果标签
    elif guess > target_number:  # 猜测大于目标数字
        result_label_text.set("数字大了哟")  # 更新结果标签
    else:  # 猜测等于目标数字
        result_label_text.set("恭喜你,猜中了")  # 更新结果标签
        show_result_dialog()  # 展示结果对话框

# 展示结果对话框
def show_result_dialog():
    result = messagebox.askquestion("恭喜", "你猜对了数字!\n你想继续游戏吗?")  # 弹出对话框询问
    if result == 'yes':  # 如果用户选择“是”
        reset_game()  # 重新开始游戏
    else:  # 如果用户选择“没有”
        root.quit()  # 退出游戏

# 重新开始游戏
def reset_game():
    global target_number  # 声明使用全局变量target_number
    # 生成新的目标数字
    target_number = random.randint(min_var.get(), max_var.get())
    result_label_text.set("请输入你的猜测")  # 清除结果信息
    last_guess_text.set(f"上一次猜测: 无")  # 清除上一次猜测的数字显示

# 设置最小值的输入框
min_label = ttk.Label(root, text="最小值", font=("Helvetica", 12))  # 创建标签
min_label.grid(row=0, column=0, padx=20, pady=10, sticky="e")  # 将标签放置在网格中

min_entry = ttk.Entry(root, textvariable=min_var, width=15)  # 创建输入框,绑定最小值变量
min_entry.grid(row=0, column=1, padx=20, pady=10)

# 设置最大值的输入框
max_label = ttk.Label(root, text="最大值", font=("Helvetica", 12))  # 创建标签
max_label.grid(row=1, column=0, padx=20, pady=10, sticky="e")  # 将标签放置在网格中

max_entry = ttk.Entry(root, textvariable=max_var, width=15)  # 创建输入框,绑定最大值变量
max_entry.grid(row=1, column=1, padx=20, pady=10)

# 设置用户输入猜测的框架
guess_frame = ttk.Frame(root)  # 创建框架
guess_frame.grid(row=2, column=0, columnspan=3, padx=20, pady=10)  # 将框架放置在网格中

guess_label = ttk.Label(guess_frame, text="猜一个数字", font=("Helvetica", 12))  # 创建标签
guess_label.pack(side=tk.LEFT, padx=5, pady=5)  # 将标签添加到框架中并设置排列

guess_entry = ttk.Entry(guess_frame, textvariable=guess_var, width=15)  # 创建输入框,绑定猜测变量
guess_entry.pack(side=tk.LEFT, padx=5, pady=5)  # 将输入框添加到框架中并设置排列

# 创建猜数字按钮
guess_button = ttk.Button(root, text="猜数字", command=check_guess, width=30)  # 创建按钮,设置点击事件为check_guess
guess_button.grid(row=3, column=0, columnspan=3, padx=20, pady=10)  # 将按钮放置在网格中

# 结果显示标签
result_label = ttk.Label(root, textvariable=result_label_text, font=("Helvetica", 16))  # 创建用来显示结果的标签
result_label.grid(row=4, column=0, columnspan=3, padx=20, pady=10)  # 将标签放置在网格中

# 上一次猜测显示标签
last_guess_label = ttk.Label(root, textvariable=last_guess_text, font=("Helvetica", 14), borderwidth=2, relief="ridge")  # 创建显示上一次猜测的标签
last_guess_label.grid(row=5, column=0, columnspan=3, padx=20, pady=10)  # 将标签放置在网格中

# 设置重置范围的函数
def reset_range():
    global target_number  # 声明使用全局变量target_number
    try:
        min_value = min_var.get()  # 获取最小值
        max_value = max_var.get()  # 获取最大值

        # 检查最小值是否小于最大值
        if min_value >= max_value:
            raise ValueError("最小值必须小于最大值")  # 如果不符合,抛出异常

        # 生成新的目标数字
        target_number = random.randint(min_value, max_value)
        result_label_text.set("请输入你的猜测")  # 清除结果信息
        last_guess_text.set(f"上一次猜测: 无")  # 清除上一次猜测的数字显示
        messagebox.showinfo("成功", "范围已重置")  # 显示成功信息
    except ValueError as e:
        messagebox.showerror("错误", str(e))  # 显示错误信息

# 创建重置范围按钮
reset_button = ttk.Button(root, text="重置范围", command=reset_range, width=30)  # 创建按钮,设置点击事件为reset_range
reset_button.grid(row=6, column=0, columnspan=3, padx=20, pady=10)  # 将按钮放置在网格中

# 运行主循环
root.mainloop()  # 启动应用程序主循环

相关文件下载地址
©下载资源版权归作者所有;本站所有资源均来源于网络,仅供学习使用,请支持正版!

相关文章

微信小程序快乐会领6大瓶可乐福利
用Python加ai写了一个本地音乐播放器
很优秀的孩子,情商智商都高!
用Python加ai调教写了一个经典贪吃蛇游戏
Python写的一个闹钟程序
摸鱼的时候用Python加ai写了一个带UI界面的猜数字游戏

发布评论

用Python加ai写了一个定时关机小工具