基于Python开发电脑定时关机工具

2025-01-22 16:50

本文主要是介绍基于Python开发电脑定时关机工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...

1. 简介

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

功能概述

1.选择关机时间:

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

2.定时关机:

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

3.随时取消:

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

4.倒计时提醒:

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

2. 运行效果

基于Python开发电脑定时关机工具

基于Python开发电脑定时关机工具

基于Python开发电脑定时关机工具

3. 相关源码

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, QandroidDateTime
from PyQt6.QtGui import QFont, QColor

# 常量定义
BUTTON_EXECUTE_TEXT = '执行'
BUTTON_CANCEL_TEXT = '取消'
BUTTON_EXECUTING_TEXT = '执行中...'
LABEL_COUNTDOWN_DEFAULT = '未设置定时关机'
ALERT_FUTURE_TIME = '请选择一个未来的时间!'
ALERT_CONFIRM_CANCEL =China编程 '是否要修改定时关机设置?'


class ShutdownTimer(QMainWindow):
    def __init__(self):
        super().__init__()
        self.shutdown_time = None
        self.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-China编程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)

        # javascript单选按钮
        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

  www.chinasem.cn      # 设置关机命令
        seconds = int((shutdown_time - datetime.datetime.now()).total_seconds())
        subprocess.run(['shutdown', '/s', '/t', str(seconds)])

        # 更新UI
        self.update_button_state(is_executing=True)

        # 启动倒计时
        self.shutdown_time = shutdown_time
        self.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 None
        else:
            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_delta

        return shutdown_time

    def 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 = None
        self.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()
                return

            hours = remaining.seconds // 3600
            minutes = (remaining.seconds % 3600) // 60
            seconds = remaining.seconds % 60

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

到此这篇关于基于python开发电脑定时关机工具的文章就介绍到这了,更多相关Python电脑定时关机内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!

这篇关于基于Python开发电脑定时关机工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1153189

相关文章

浅析python如何去掉字符串中最后一个字符

《浅析python如何去掉字符串中最后一个字符》在Python中,字符串是不可变对象,因此无法直接修改原字符串,但可以通过生成新字符串的方式去掉最后一个字符,本文整理了三种高效方法,希望对大家有所帮助... 目录方法1:切片操作(最推荐)方法2:长度计算索引方法3:拼接剩余字符(不推荐,仅作演示)关键注意事

python版本切换工具pyenv的安装及用法

《python版本切换工具pyenv的安装及用法》Pyenv是管理Python版本的最佳工具之一,特别适合开发者和需要切换多个Python版本的用户,:本文主要介绍python版本切换工具pyen... 目录Pyenv 是什么?安装 Pyenv(MACOS)使用 Homebrew:配置 shell(zsh

SpringBoot整合 Quartz实现定时推送实战指南

《SpringBoot整合Quartz实现定时推送实战指南》文章介绍了SpringBoot中使用Quartz动态定时任务和任务持久化实现多条不确定结束时间并提前N分钟推送的方案,本文结合实例代码给大... 目录前言一、Quartz 是什么?1、核心定位:解决什么问题?2、Quartz 核心组件二、使用步骤1

VSCode开发中有哪些好用的插件和快捷键

《VSCode开发中有哪些好用的插件和快捷键》作为全球最受欢迎的编程工具,VSCode的快捷键体系是提升开发效率的核心密码,:本文主要介绍VSCode开发中有哪些好用的插件和快捷键的相关资料,文中... 目录前言1、vscode插件1.1 Live-server1.2 Auto Rename Tag1.3

Python自动化提取多个Word文档的文本

《Python自动化提取多个Word文档的文本》在日常工作和学习中,我们经常需要处理大量的Word文档,本文将深入探讨如何利用Python批量提取Word文档中的文本内容,帮助你解放生产力,感兴趣的小... 目录为什么需要批量提取Word文档文本批量提取Word文本的核心技术与工具安装 Spire.Doc

Python中Request的安装以及简单的使用方法图文教程

《Python中Request的安装以及简单的使用方法图文教程》python里的request库经常被用于进行网络爬虫,想要学习网络爬虫的同学必须得安装request这个第三方库,:本文主要介绍P... 目录1.Requests 安装cmd 窗口安装为pycharm安装在pycharm设置中为项目安装req

Python容器转换与共有函数举例详解

《Python容器转换与共有函数举例详解》Python容器是Python编程语言中非常基础且重要的概念,它们提供了数据的存储和组织方式,下面:本文主要介绍Python容器转换与共有函数的相关资料,... 目录python容器转换与共有函数详解一、容器类型概览二、容器类型转换1. 基本容器转换2. 高级转换示

使用Python将PDF表格自动提取并写入Word文档表格

《使用Python将PDF表格自动提取并写入Word文档表格》在实际办公与数据处理场景中,PDF文件里的表格往往无法直接复制到Word中,本文将介绍如何使用Python从PDF文件中提取表格数据,并将... 目录引言1. 加载 PDF 文件并准备 Word 文档2. 提取 PDF 表格并创建 Word 表格

使用Python实现局域网远程监控电脑屏幕的方法

《使用Python实现局域网远程监控电脑屏幕的方法》文章介绍了两种使用Python在局域网内实现远程监控电脑屏幕的方法,方法一使用mss和socket,方法二使用PyAutoGUI和Flask,每种方... 目录方法一:使用mss和socket实现屏幕共享服务端(被监控端)客户端(监控端)方法二:使用PyA

Python列表的创建与删除的操作指南

《Python列表的创建与删除的操作指南》列表(list)是Python中最常用、最灵活的内置数据结构之一,它支持动态扩容、混合类型、嵌套结构,几乎无处不在,但你真的会创建和删除列表吗,本文给大家介绍... 目录一、前言二、列表的创建方式1. 字面量语法(最常用)2. 使用list()构造器3. 列表推导式