Python 电脑定时关机工具

ops/2025/1/23 1:37:56/

Python 电脑定时关机工具

相关资源文件已经打包成EXE文件,可双击直接运行程序,且文章末尾已附上相关源码,以供大家学习交流,博主主页还有更多Python相关程序案例,秉着开源精神的想法,望大家喜欢,点个关注不迷路!!!

1. 简介:

这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做什么。你只需要设定好时间,它就能在指定的时刻执行关机任务,绝对精准,绝对准时。如果你突然改变主意,管家也非常懂事,立刻取消任务,并且让你确认是否真的要放弃关机。

功能概述:

选择关机时间:

你可以选择一个未来的时间点(绝对时间),或者从现在开始延迟一段时间(相对时间),就像预约闹钟一样,精确到秒!
定时关机:

设置好关机时间后,程序会自动计算倒计时,不管你去做什么,它都会提醒你:“再过 XX 小时 XX 分钟 XX 秒,电脑就会乖乖关机。”
随时取消:

你改变了主意,突然不想关机了?没问题!随时点击取消,它会立马停止关机进程,不会让你后悔。
倒计时提醒:

在你设置的时间到来之前,它会在界面上显示倒计时,让你时刻知道剩余的时间。想象一下,一边工作一边看着电脑准备入睡的样子。
简而言之,这个工具就像是一个非常懂事的“关机助手”,不会打扰你,却能在你需要它的时候,安静地完成任务。

2. 运行效果:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. 相关源码:

python">import sys
import datetime
import subprocess
from PyQt6.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QPushButton, QRadioButton, QDateTimeEdit, QTimeEdit, QMessageBox, QGroupBox, QSpacerItem, QSizePolicy)
from PyQt6.QtCore import Qt, QTimer, QDateTime
from PyQt6.QtGui import QFont, QColor# 常量定义
BUTTON_EXECUTE_TEXT = '执行'
BUTTON_CANCEL_TEXT = '取消'
BUTTON_EXECUTING_TEXT = '执行中...'
LABEL_COUNTDOWN_DEFAULT = '未设置定时关机'
ALERT_FUTURE_TIME = '请选择一个未来的时间!'
ALERT_CONFIRM_CANCEL = '是否要修改定时关机设置?'class ShutdownTimer(QMainWindow):def __init__(self):super().__init__()self.shutdown_time = Noneself.timer = QTimer()self.timer.timeout.connect(self.update_countdown)self.init_ui()def init_ui(self):"""初始化界面元素"""self.setWindowTitle('定时关机工具')screen = QApplication.primaryScreen().geometry()self.setGeometry(screen.width() // 4, screen.height() // 4, 585, 253)  # 修改窗口尺寸为583x614# 主布局central_widget = QWidget()self.setCentralWidget(central_widget)layout = QVBoxLayout(central_widget)# 倒计时显示区域self.countdown_label = QLabel(LABEL_COUNTDOWN_DEFAULT)self.countdown_label.setAlignment(Qt.AlignmentFlag.AlignCenter)self.countdown_label.setStyleSheet("""QLabel {background-color: black;color: red;padding: 20px;border: 2px solid gray;border-radius: 10px;font-size: 30px;}""")layout.addWidget(self.countdown_label)# 时间设置区域self.setup_time_settings(layout)# 信号连接self.absolute_radio.toggled.connect(self.toggle_time_input)self.execute_btn.clicked.connect(self.execute_shutdown)self.cancel_btn.clicked.connect(self.cancel_shutdown)def setup_time_settings(self, layout):"""设置时间选择控件和按钮"""settings_widget = QWidget()settings_layout = QHBoxLayout(settings_widget)# 时间选择区域time_widget = QWidget()time_layout = QVBoxLayout(time_widget)# 单选按钮self.absolute_radio = QRadioButton('绝对时间')self.relative_radio = QRadioButton('相对时间')self.absolute_radio.setChecked(True)time_layout.addWidget(self.absolute_radio)time_layout.addWidget(self.relative_radio)# 时间选择器self.datetime_edit = QDateTimeEdit()self.datetime_edit.setDateTime(QDateTime.currentDateTime().addSecs(3600))  # 默认一小时后self.time_edit = QTimeEdit()self.time_edit.setTime(self.time_edit.time().addSecs(3600))  # 默认一个小时后time_layout.addWidget(self.datetime_edit)time_layout.addWidget(self.time_edit)self.time_edit.hide()  # 默认隐藏相对时间settings_layout.addWidget(time_widget)# 按钮区域button_widget = QWidget()button_layout = QVBoxLayout(button_widget)self.execute_btn = QPushButton(BUTTON_EXECUTE_TEXT)self.cancel_btn = QPushButton(BUTTON_CANCEL_TEXT)button_layout.addWidget(self.execute_btn)button_layout.addWidget(self.cancel_btn)settings_layout.addWidget(button_widget)layout.addWidget(settings_widget)# 添加空白间距spacer = QSpacerItem(20, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding)layout.addItem(spacer)def toggle_time_input(self):"""切换时间输入方式"""if self.absolute_radio.isChecked():self.datetime_edit.show()self.time_edit.hide()else:self.datetime_edit.hide()self.time_edit.show()def execute_shutdown(self):"""执行定时关机"""shutdown_time = self.calculate_shutdown_time()if not shutdown_time:return# 设置关机命令seconds = int((shutdown_time - datetime.datetime.now()).total_seconds())subprocess.run(['shutdown', '/s', '/t', str(seconds)])# 更新UIself.update_button_state(is_executing=True)# 启动倒计时self.shutdown_time = shutdown_timeself.timer.start(1000)def calculate_shutdown_time(self):"""计算定时关机时间"""if self.absolute_radio.isChecked():shutdown_time = self.datetime_edit.dateTime().toPyDateTime()if shutdown_time <= datetime.datetime.now():self.show_warning(ALERT_FUTURE_TIME)return Noneelse:current_time = datetime.datetime.now()time_delta = datetime.timedelta(hours=self.time_edit.time().hour(),minutes=self.time_edit.time().minute(),seconds=self.time_edit.time().second())shutdown_time = current_time + time_deltareturn shutdown_timedef show_warning(self, message):"""显示警告信息"""QMessageBox.warning(self, '警告', message)def update_button_state(self, is_executing):"""更新按钮状态"""if is_executing:self.execute_btn.setEnabled(False)self.execute_btn.setText(BUTTON_EXECUTING_TEXT)self.execute_btn.setStyleSheet('background-color: #90EE90; color: gray;')else:self.execute_btn.setEnabled(True)self.execute_btn.setText(BUTTON_EXECUTE_TEXT)self.execute_btn.setStyleSheet('')def cancel_shutdown(self):"""取消定时关机"""reply = QMessageBox.question(self, '确认', ALERT_CONFIRM_CANCEL,QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)if reply == QMessageBox.StandardButton.Yes:# 取消当前关机命令subprocess.run(['shutdown', '/a'])self.reset_ui()else:subprocess.run(['shutdown', '/a'])self.close()def reset_ui(self):"""重置UI状态"""self.shutdown_time = Noneself.timer.stop()self.countdown_label.setText(LABEL_COUNTDOWN_DEFAULT)self.update_button_state(is_executing=False)def update_countdown(self):"""更新倒计时"""if self.shutdown_time:remaining = self.shutdown_time - datetime.datetime.now()if remaining.total_seconds() <= 0:self.timer.stop()returnhours = remaining.seconds // 3600minutes = (remaining.seconds % 3600) // 60seconds = remaining.seconds % 60self.countdown_label.setText(f'距离关机还有 {hours:02d}小时 {minutes:02d}{seconds:02d}秒')if __name__ == '__main__':app = QApplication(sys.argv)app.setStyle('Fusion')  # 使用 Fusion 风格,接近 Windows 10 风格window = ShutdownTimer()window.show()sys.exit(app.exec())

http://www.ppmy.cn/ops/152331.html

相关文章

2025年大模型气象预测架构与商业化影响

随着人工智能技术,尤其是大模型(如深度学习、大规模神经网络)的飞速发展,气象预测的传统方法正在经历深刻变革。2025年,气象预测将借助大模型技术进入一个新的阶段。本文将从架构角度详细探讨2025年大模型在气象预测中的应用,并分析其对商业化的潜在影响。 一、2025年大模…

AIP-111 平面

编号111原文链接AIP-111: Planes状态批准创建日期2023-06-17更新日期2023-06-17 API上的资源和方法可以根据所属或执行操作的 平面 分类。API上下文中定义了以下平面&#xff1a; 管理平面 &#xff1a;统一的、面向资源的API&#xff0c;主要用于配置和资源检索。数据平面 &…

Android系统开发(一):AOSP 架构全解析:开源拥抱安卓未来

引言 当我们手握智能手机&#xff0c;流畅地滑动屏幕、切换应用、欣赏动画时&#xff0c;背后其实藏着一套庞大且精密的开源系统——Android AOSP&#xff08;Android Open Source Project&#xff09;。这套系统不仅是所有安卓设备的根基&#xff0c;也是系统开发者的终极 pl…

linux-NFS网络共享存储服务配置

1.NFS服务原理 NFS会经常用到&#xff0c;用于在网络上共享存储&#xff0c;这样讲&#xff0c;你对NFS可能不太了解&#xff0c;举一个例子&#xff0c; 加入有三台机器A,B,C&#xff0c;它们需要访问同一个目录&#xff0c;目录中都是图片&#xff0c;传统的做法是把这些 图…

Hive PERCENTILE_APPROX 函数详解

Hive PERCENTILE_APPROX 函数详解 PERCENTILE_APPROX 是 Hive 中一个重要的函数&#xff0c;用于近似计算数据的百分位数。本文介绍 PERCENTILE_APPROX 的原理、参数以及核心概念 B 值等信息。 函数语法 PERCENTILE_APPROX(expression, percentage [, B])expression: 输入的数…

20250118面试鸭特训营第26天

更多特训营笔记详见个人主页【面试鸭特训营】专栏 1.说下你常用的 Linux 命令&#xff1f; 文件与目录操作 命令描述ls列出当前目录和文件和子目录ls -l列出当前目录和文件和子目录&#xff0c;包括详细信息ls -a列出当前目录和文件和子目录&#xff0c;包括隐藏文件cd切换目…

实现宿主机(Windows 10 Docker Desktop)和Linux容器之间的数据挂载的三种方法

在Windows 10上使用Docker Desktop运行Linux容器时&#xff0c;经常需要将宿主机上的文件或目录与容器内的文件或目录进行关联&#xff0c;以便实现数据的共享和持久化。Docker提供了多种方法来实现这一目标&#xff0c;包括使用-v选项挂载宿主机目录、创建Docker数据卷以及使用…

大文件上传服务-后端V1V2

文章目录 大文件上传概述:minio分布式文件存储使用的一些技术校验MD5的逻辑 uploadV1 版本 1uploadv2 版本 2 大文件上传概述: 之前项目做了一个文件上传的功能,最近看到有面试会具体的问这个上传功能的细节&#xff0c;把之前做的项目拿过来总结一下&#xff0c;自己写的一个…