欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于PyQt5實(shí)現(xiàn)的Windows定時(shí)關(guān)機(jī)工具

 更新時(shí)間:2025年04月14日 15:27:57   作者:創(chuàng)客白澤  
在日常使用電腦的過程中,我們經(jīng)常會(huì)遇到需要定時(shí)關(guān)機(jī)的場(chǎng)景,雖然 Windows 自帶 shutdown 命令可以定時(shí)關(guān)機(jī),但操作方式較為繁瑣,缺乏可視化界面,因此,本篇文章將帶大家實(shí)現(xiàn)一個(gè)基于 PyQt5 的 Windows 定時(shí)關(guān)機(jī)工具,需要的朋友可以參考下

概述

在日常使用電腦的過程中,我們經(jīng)常會(huì)遇到需要定時(shí)關(guān)機(jī)的場(chǎng)景,比如:

  • 夜間下載文件,想讓電腦在任務(wù)完成后自動(dòng)關(guān)機(jī)。
  • 長(zhǎng)時(shí)間運(yùn)行的程序,需要在某個(gè)時(shí)間點(diǎn)關(guān)閉系統(tǒng)。
  • 限制電腦使用時(shí)間,避免長(zhǎng)時(shí)間占用資源。

雖然 Windows 自帶 shutdown 命令可以定時(shí)關(guān)機(jī),但操作方式較為繁瑣,缺乏可視化界面。因此,本篇文章將帶大家實(shí)現(xiàn)一個(gè)基于 PyQt5 的 Windows 定時(shí)關(guān)機(jī)工具,支持定時(shí)或延時(shí)關(guān)機(jī)、重啟、注銷,并提供系統(tǒng)托盤功能,方便隨時(shí)管理關(guān)機(jī)任務(wù)。

功能介紹

本工具主要具備以下功能:

定時(shí)關(guān)機(jī) —— 設(shè)定具體時(shí)間,到點(diǎn)自動(dòng)關(guān)機(jī)。

延時(shí)關(guān)機(jī) —— 設(shè)置倒計(jì)時(shí),倒計(jì)時(shí)結(jié)束后自動(dòng)關(guān)機(jī)。

重啟 & 注銷 —— 除關(guān)機(jī)外,還可執(zhí)行系統(tǒng)重啟和注銷操作。

取消操作 —— 關(guān)機(jī)前可隨時(shí)取消,避免誤操作。

系統(tǒng)托盤支持 —— 運(yùn)行后最小化到系統(tǒng)托盤,不影響日常操作。

人性化提示 —— 關(guān)機(jī)前彈出提醒,避免突發(fā)關(guān)機(jī)。

代碼實(shí)現(xiàn)

1. 安裝依賴

在運(yùn)行代碼之前,我們需要先安裝 PyQt5 庫(kù):

pip install PyQt5 pyqt5-tools

2. 代碼編寫

以下是完整的代碼實(shí)現(xiàn):

import sys
import os
import time
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QTimeEdit, QSystemTrayIcon, QMenu, QAction
from PyQt5.QtGui import QIcon
from PyQt5.QtCore import QTimer, QTime

class ShutdownApp(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('Windows 定時(shí)關(guān)機(jī)工具')
        self.setGeometry(600, 300, 300, 200)
        
        self.label = QLabel('請(qǐng)選擇關(guān)機(jī)時(shí)間:', self)
        self.timeEdit = QTimeEdit(self)
        self.timeEdit.setDisplayFormat("HH:mm")
        
        self.startButton = QPushButton('設(shè)置關(guān)機(jī)', self)
        self.startButton.clicked.connect(self.scheduleShutdown)
        
        self.cancelButton = QPushButton('取消關(guān)機(jī)', self)
        self.cancelButton.clicked.connect(self.cancelShutdown)
        
        layout = QVBoxLayout()
        layout.addWidget(self.label)
        layout.addWidget(self.timeEdit)
        layout.addWidget(self.startButton)
        layout.addWidget(self.cancelButton)
        
        self.setLayout(layout)
        
        # 托盤功能
        self.trayIcon = QSystemTrayIcon(QIcon("icon.png"), self)
        trayMenu = QMenu()
        exitAction = QAction("退出", self)
        exitAction.triggered.connect(self.close)
        trayMenu.addAction(exitAction)
        self.trayIcon.setContextMenu(trayMenu)
        self.trayIcon.show()

    def scheduleShutdown(self):
        shutdown_time = self.timeEdit.time()
        current_time = QTime.currentTime()
        seconds = current_time.secsTo(shutdown_time)
        
        if seconds <= 0:
            self.label.setText("請(qǐng)選擇一個(gè)未來的時(shí)間!")
            return
        
        self.label.setText(f"關(guān)機(jī)已設(shè)置,將在 {shutdown_time.toString()} 執(zhí)行")
        os.system(f'shutdown -s -t {seconds}')

    def cancelShutdown(self):
        os.system('shutdown -a')
        self.label.setText("關(guān)機(jī)已取消!")

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = ShutdownApp()
    ex.show()
    sys.exit(app.exec_())

功能使用

1. 運(yùn)行軟件

python shutdown_tool.py

2. 設(shè)置定時(shí)關(guān)機(jī)

  • 選擇時(shí)間
  • 點(diǎn)擊 “設(shè)置關(guān)機(jī)”
  • 程序?qū)⒂?jì)算剩余時(shí)間,并執(zhí)行關(guān)機(jī)命令

3. 取消關(guān)機(jī)

  • 如果想取消定時(shí)關(guān)機(jī),點(diǎn)擊 “取消關(guān)機(jī)” 按鈕
  • 也可以手動(dòng)在命令行執(zhí)行:
shutdown -a

4. 系統(tǒng)托盤

  • 運(yùn)行后可最小化到托盤
  • 右鍵點(diǎn)擊托盤圖標(biāo)可 退出應(yīng)用

技術(shù)要點(diǎn)解析

關(guān)機(jī)命令

Windows 提供 shutdown 命令來執(zhí)行關(guān)機(jī)任務(wù):

  • 定時(shí)關(guān)機(jī)
shutdown -s -t 秒數(shù)
  • 取消關(guān)機(jī)
shutdown -a

計(jì)算關(guān)機(jī)時(shí)間

我們使用 QTime 計(jì)算當(dāng)前時(shí)間到設(shè)定時(shí)間的 秒數(shù),避免時(shí)間計(jì)算錯(cuò)誤:

seconds = current_time.secsTo(shutdown_time)

托盤圖標(biāo)支持

使用 QSystemTrayIcon 實(shí)現(xiàn)最小化到托盤:

self.trayIcon = QSystemTrayIcon(QIcon("icon.png"), self)

這樣即使窗口關(guān)閉,應(yīng)用仍能在后臺(tái)運(yùn)行。

運(yùn)行效果

相關(guān)源碼

import os
import sys
import time
import configparser
import win32api
import win32con
from datetime import datetime, timedelta
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, 
                            QGroupBox, QRadioButton, QDateTimeEdit, QLabel, QPushButton, 
                            QCheckBox, QSystemTrayIcon, QMenu, QMessageBox, QSpacerItem, 
                            QSizePolicy, QFrame)
from PyQt5.QtCore import Qt, QTimer, QDateTime, QTime, QSize, QSharedMemory
from PyQt5.QtGui import QIcon, QFont, QPalette, QColor

def resource_path(relative_path):
    """ 獲取資源的絕對(duì)路徑,適用于開發(fā)環(huán)境和PyInstaller單文件模式 """
    if hasattr(sys, '_MEIPASS'):
        # PyInstaller創(chuàng)建的臨時(shí)文件夾
        return os.path.join(sys._MEIPASS, relative_path)
    return os.path.join(os.path.abspath('.'), relative_path)

class ShutdownApp(QMainWindow):
    def __init__(self):
        super().__init__()
        self.task_running = False
        self.config_file = os.path.join(os.getenv('APPDATA'), 'shutdown_config.ini')
        self.first_show = True  # 用于跟蹤是否是第一次顯示
        
        self.setup_ui_style()
        self.init_ui()
        self.load_config()
        
        # 系統(tǒng)托盤
        self.tray_icon = QSystemTrayIcon(self)
        self.tray_icon.setIcon(QIcon(resource_path("icon.ico")))
        self.tray_icon.setToolTip("定時(shí)關(guān)機(jī)")
        self.tray_icon.activated.connect(self.tray_icon_activated)
        
        # 托盤菜單
        self.tray_menu = QMenu()
        self.show_action = self.tray_menu.addAction("顯示")
        self.exit_action = self.tray_menu.addAction("退出")
        self.show_action.triggered.connect(self.show_normal)
        self.exit_action.triggered.connect(self.confirm_exit)
        self.tray_icon.setContextMenu(self.tray_menu)
        self.tray_icon.show()  # 確保托盤圖標(biāo)顯示
        
        # 顯示當(dāng)前時(shí)間
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.update_current_time)
        self.timer.start(1000)
        
        # 剩余時(shí)間計(jì)時(shí)器
        self.countdown_timer = QTimer(self)
        self.countdown_timer.timeout.connect(self.update_remaining_time)
    
    def setup_ui_style(self):
        """設(shè)置全局UI樣式"""
        self.setStyleSheet("""
            QMainWindow {
                background-color: #f5f5f5;
            }
            QGroupBox {
                border: 1px solid #ccc;
                border-radius: 4px;
                margin-top: 10px;
                padding-top: 15px;
                font-weight: bold;
                color: #333;
            }
            QGroupBox::title {
                subcontrol-origin: margin;
                left: 10px;
                padding: 0 3px;
            }
            QRadioButton, QCheckBox {
                color: #444;
            }
            QPushButton {
                background-color: #4CAF50;
                color: white;
                border: none;
                padding: 8px 16px;
                border-radius: 4px;
                min-width: 80px;
            }
            QPushButton:hover {
                background-color: #45a049;
            }
            QPushButton:disabled {
                background-color: #cccccc;
            }
            QPushButton#cancel_btn {
                background-color: #f44336;
            }
            QPushButton#cancel_btn:hover {
                background-color: #d32f2f;
            }
            QDateTimeEdit {
                padding: 5px;
                border: 1px solid #ddd;
                border-radius: 4px;
            }
            QLabel#current_time_label {
                font-size: 16px;
                color: #333;
                padding: 5px;
                background-color: #e9f5e9;
                border-radius: 4px;
            }
            QLabel#remaining_time_label {
                font-size: 16px;
                color: #d32f2f;
                font-weight: bold;
                padding: 5px;
                background-color: #f9e9e9;
                border-radius: 4px;
            }
        """)
    
    def init_ui(self):
        self.setWindowTitle("定時(shí)關(guān)機(jī)")
        self.setWindowIcon(QIcon(resource_path("icon.ico")))
        self.resize(300, 440)
        
        # 主窗口布局
        main_widget = QWidget()
        self.setCentralWidget(main_widget)
        layout = QVBoxLayout(main_widget)
        layout.setContentsMargins(12, 12, 12, 12)
        layout.setSpacing(10)
        
        # 當(dāng)前時(shí)間顯示
        self.current_time_label = QLabel()
        self.current_time_label.setAlignment(Qt.AlignCenter)
        self.current_time_label.setObjectName("current_time_label")
        layout.addWidget(self.current_time_label)
        
        # 添加分隔線
        line = QFrame()
        line.setFrameShape(QFrame.HLine)
        line.setFrameShadow(QFrame.Sunken)
        layout.addWidget(line)
        
        # 定時(shí)/延時(shí)選擇
        time_type_group = QGroupBox("時(shí)間類型")
        time_type_layout = QHBoxLayout()
        time_type_layout.setContentsMargins(10, 15, 10, 10)
        
        self.fixed_time_radio = QRadioButton("定時(shí)關(guān)機(jī)")
        self.delay_time_radio = QRadioButton("延時(shí)關(guān)機(jī)")
        self.fixed_time_radio.setChecked(True)
        
        time_type_layout.addWidget(self.fixed_time_radio)
        time_type_layout.addWidget(self.delay_time_radio)
        time_type_group.setLayout(time_type_layout)
        layout.addWidget(time_type_group)
        
        # 定時(shí)時(shí)間選擇
        self.fixed_datetime = QDateTimeEdit()
        self.fixed_datetime.setDisplayFormat("yyyy-MM-dd HH:mm:ss")
        self.fixed_datetime.setDateTime(QDateTime.currentDateTime())
        self.fixed_datetime.setCalendarPopup(True)
        layout.addWidget(self.fixed_datetime)
        
        # 延時(shí)時(shí)間選擇
        self.delay_datetime = QDateTimeEdit()
        self.delay_datetime.setDisplayFormat("HH:mm:ss")
        self.delay_datetime.setTime(QTime(0, 0, 0))
        self.delay_datetime.setVisible(False)
        layout.addWidget(self.delay_datetime)
        
        # 連接信號(hào)
        self.fixed_time_radio.toggled.connect(self.on_time_type_changed)
        
        # 操作類型
        action_group = QGroupBox("操作類型")
        action_layout = QHBoxLayout()
        action_layout.setContentsMargins(10, 15, 10, 10)
        
        self.shutdown_radio = QRadioButton("關(guān)機(jī)")
        self.restart_radio = QRadioButton("重啟")
        self.logoff_radio = QRadioButton("注銷")
        self.shutdown_radio.setChecked(True)
        
        action_layout.addWidget(self.shutdown_radio)
        action_layout.addWidget(self.restart_radio)
        action_layout.addWidget(self.logoff_radio)
        action_group.setLayout(action_layout)
        layout.addWidget(action_group)
        
        # 選項(xiàng)
        options_group = QGroupBox("選項(xiàng)")
        options_layout = QVBoxLayout()
        options_layout.setContentsMargins(10, 15, 10, 10)
        
        self.auto_start_check = QCheckBox("隨系統(tǒng)啟動(dòng)")
        self.loop_exec_check = QCheckBox("循環(huán)執(zhí)行")
        
        options_layout.addWidget(self.auto_start_check)
        options_layout.addWidget(self.loop_exec_check)
        options_group.setLayout(options_layout)
        layout.addWidget(options_group)
        
        # 剩余時(shí)間顯示
        self.remaining_time_label = QLabel()
        self.remaining_time_label.setAlignment(Qt.AlignCenter)
        self.remaining_time_label.setObjectName("remaining_time_label")
        layout.addWidget(self.remaining_time_label)
        
        # 按鈕布局
        button_layout = QHBoxLayout()
        button_layout.setContentsMargins(0, 10, 0, 0)
        button_layout.setSpacing(15)
        
        self.save_btn = QPushButton("保存設(shè)置")
        self.cancel_btn = QPushButton("取消")
        self.cancel_btn.setObjectName("cancel_btn")
        self.cancel_btn.setEnabled(False)
        
        self.save_btn.clicked.connect(self.save_config)
        self.cancel_btn.clicked.connect(self.cancel_task)
        
        button_layout.addWidget(self.save_btn)
        button_layout.addWidget(self.cancel_btn)
        layout.addLayout(button_layout)
        
        # 添加彈簧使布局更緊湊
        layout.addSpacerItem(QSpacerItem(20, 10, QSizePolicy.Minimum, QSizePolicy.Expanding))
    
    def on_time_type_changed(self, checked):
        self.fixed_datetime.setVisible(checked)
        self.delay_datetime.setVisible(not checked)
        
    def update_current_time(self):
        current_time = datetime.now().strftime("%Y年%m月%d日 %H:%M:%S")
        self.current_time_label.setText(f"當(dāng)前時(shí)間: {current_time}")
        
    def save_config(self):
        config = configparser.ConfigParser()
        config['task'] = {
            'time_type': 'fixed' if self.fixed_time_radio.isChecked() else 'delay',
            'time': self.fixed_datetime.dateTime().toString("HHmmss") if self.fixed_time_radio.isChecked() else self.delay_datetime.time().toString("HHmmss"),
            'execute_type': 'shutdown' if self.shutdown_radio.isChecked() else 'restart' if self.restart_radio.isChecked() else 'logoff',
            'auto_start': '1' if self.auto_start_check.isChecked() else '0',
            'task_circ': '1' if self.loop_exec_check.isChecked() else '0'
        }
        
        with open(self.config_file, 'w') as f:
            config.write(f)
            
        self.set_auto_start(self.auto_start_check.isChecked())
        self.cancel_btn.setEnabled(True)  # 保存后啟用取消按鈕
        self.start_task()
        
    def load_config(self):
        if not os.path.exists(self.config_file):
            return
            
        config = configparser.ConfigParser()
        config.read(self.config_file)
        
        if 'task' in config:
            task_config = config['task']
            
            # 時(shí)間類型
            if task_config.get('time_type', 'fixed') == 'fixed':
                self.fixed_time_radio.setChecked(True)
                time_str = task_config.get('time', '000000')
                qtime = QTime.fromString(time_str, "HHmmss")
                current_date = QDateTime.currentDateTime()
                self.fixed_datetime.setDateTime(QDateTime(current_date.date(), qtime))
            else:
                self.delay_time_radio.setChecked(True)
                time_str = task_config.get('time', '000000')
                qtime = QTime.fromString(time_str, "HHmmss")
                self.delay_datetime.setTime(qtime)
                
            # 操作類型
            execute_type = task_config.get('execute_type', 'shutdown')
            if execute_type == 'shutdown':
                self.shutdown_radio.setChecked(True)
            elif execute_type == 'restart':
                self.restart_radio.setChecked(True)
            else:
                self.logoff_radio.setChecked(True)
                
            # 選項(xiàng)
            self.auto_start_check.setChecked(task_config.get('auto_start', '0') == '1')
            self.loop_exec_check.setChecked(task_config.get('task_circ', '0') == '1')
            
            if self.loop_exec_check.isChecked():
                self.cancel_btn.setEnabled(True)
                self.start_task()
                
    def set_auto_start(self, enable):
        key = win32con.HKEY_CURRENT_USER
        sub_key = r"Software\Microsoft\Windows\CurrentVersion\Run"
        
        try:
            reg_key = win32api.RegOpenKey(key, sub_key, 0, win32con.KEY_ALL_ACCESS)
            if enable:
                win32api.RegSetValueEx(reg_key, "定時(shí)關(guān)機(jī)", 0, win32con.REG_SZ, sys.executable)
            else:
                try:
                    win32api.RegDeleteValue(reg_key, "定時(shí)關(guān)機(jī)")
                except:
                    pass
            win32api.RegCloseKey(reg_key)
        except Exception as e:
            QMessageBox.warning(self, "警告", f"設(shè)置自啟動(dòng)失敗: {str(e)}")
            
    def start_task(self):
        if self.task_running:
            return
            
        self.task_running = True
        self.toggle_components(True)
        
        if self.fixed_time_radio.isChecked():
            target_time = self.fixed_datetime.dateTime().toPyDateTime()
            now = datetime.now()
            
            if target_time < now:
                target_time += timedelta(days=1)
                
            self.target_time = target_time
        else:
            delay = self.delay_datetime.time()
            self.target_time = datetime.now() + timedelta(
                hours=delay.hour(),
                minutes=delay.minute(),
                seconds=delay.second()
            )
            
        self.countdown_timer.start(1000)
        self.update_remaining_time()
        
    def update_remaining_time(self):
        now = datetime.now()
        remaining = self.target_time - now
        
        if remaining.total_seconds() <= 0:
            self.execute_action()
            if self.loop_exec_check.isChecked():
                self.start_task()
            else:
                self.cancel_task()
            return
            
        hours, remainder = divmod(int(remaining.total_seconds()), 3600)
        minutes, seconds = divmod(remainder, 60)
        remaining_str = f"{hours}小時(shí){minutes}分{seconds}秒"
        self.remaining_time_label.setText(f"剩余時(shí)間: {remaining_str}")
        
        # 更新托盤提示
        self.tray_icon.setToolTip(f"定時(shí)關(guān)機(jī)\n剩余時(shí)間: {remaining_str}")
        
    def execute_action(self):
        if self.shutdown_radio.isChecked():
            os.system("shutdown -s -t 0")
        elif self.restart_radio.isChecked():
            os.system("shutdown -r -t 0")
        else:
            os.system("shutdown -l")
            
    def cancel_task(self):
        """取消定時(shí)任務(wù)"""
        if not self.task_running:
            QMessageBox.warning(self, "警告", "沒有正在運(yùn)行的任務(wù)")
            return
            
        reply = QMessageBox.question(
            self, 
            "確認(rèn)", 
            "確定要取消定時(shí)任務(wù)嗎?", 
            QMessageBox.Yes | QMessageBox.No
        )
        
        if reply == QMessageBox.Yes:
            self.task_running = False
            self.countdown_timer.stop()
            self.remaining_time_label.setText("")
            self.tray_icon.setToolTip("定時(shí)關(guān)機(jī)")
            self.toggle_components(False)
            self.cancel_btn.setEnabled(False)
            
            # 顯示取消成功的提示
            QMessageBox.information(self, "提示", "定時(shí)任務(wù)已取消", QMessageBox.Ok)
        
    def toggle_components(self, disabled):
        self.fixed_time_radio.setDisabled(disabled)
        self.delay_time_radio.setDisabled(disabled)
        self.fixed_datetime.setDisabled(disabled)
        self.delay_datetime.setDisabled(disabled)
        self.shutdown_radio.setDisabled(disabled)
        self.restart_radio.setDisabled(disabled)
        self.logoff_radio.setDisabled(disabled)
        self.auto_start_check.setDisabled(disabled)
        self.loop_exec_check.setDisabled(disabled)
        self.save_btn.setDisabled(disabled)
        
    def tray_icon_activated(self, reason):
        if reason == QSystemTrayIcon.DoubleClick:
            self.show_normal()
            
    def show_normal(self):
        self.show()
        self.setWindowState(self.windowState() & ~Qt.WindowMinimized)
        self.activateWindow()
        self.raise_()
        
    def closeEvent(self, event):
        """重寫關(guān)閉事件,改為最小化到托盤"""
        if self.isVisible():
            self.hide()
            self.tray_icon.show()  # 確保托盤圖標(biāo)顯示
            if not self.first_show:  # 第一次啟動(dòng)時(shí)不顯示消息
                self.tray_icon.showMessage(
                    "定時(shí)關(guān)機(jī)", 
                    "程序已最小化到托盤", 
                    QSystemTrayIcon.Information, 
                    2000
                )
            self.first_show = False
            event.ignore()
        else:
            # 真正退出程序
            self.tray_icon.hide()
            event.accept()
            
    def confirm_exit(self):
        reply = QMessageBox.question(self, '確認(rèn)', '是否退出?', 
                                    QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            self.tray_icon.hide()
            QApplication.quit()

def main():
    # 防止重復(fù)運(yùn)行
    shared = QSharedMemory("定時(shí)關(guān)機(jī)")
    if not shared.create(512, QSharedMemory.ReadWrite):
        QMessageBox.warning(None, "警告", "程序已經(jīng)在運(yùn)行!")
        sys.exit(0)
        
    # 設(shè)置高DPI支持
    QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
    
    app = QApplication(sys.argv)
    window = ShutdownApp()
    
    # 如果配置了隨系統(tǒng)啟動(dòng)且循環(huán)執(zhí)行,則不顯示窗口
    config_file = os.path.join(os.getenv('APPDATA'), 'shutdown_config.ini')
    if os.path.exists(config_file):
        config = configparser.ConfigParser()
        config.read(config_file)
        
        if 'task' in config and config['task'].get('auto_start', '0') == '1':
            if config['task'].get('task_circ', '0') == '1':
                window.showMinimized()
            else:
                window.show()
        else:
            window.show()
    else:
        window.show()
        
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

總結(jié)與優(yōu)化方向

優(yōu)點(diǎn)

界面簡(jiǎn)潔,操作方便

系統(tǒng)托盤支持,后臺(tái)靜默運(yùn)行

支持定時(shí) & 倒計(jì)時(shí)模式,滿足不同需求

可優(yōu)化方向

支持多任務(wù)管理(同時(shí)設(shè)置多個(gè)定時(shí)任務(wù))

增加日志記錄(記錄每次關(guān)機(jī)任務(wù))

增加任務(wù)進(jìn)度條(倒計(jì)時(shí)可視化顯示)

如果你對(duì)這個(gè)工具感興趣,可以嘗試優(yōu)化它,讓它變得更加智能!

以上就是基于PyQt5實(shí)現(xiàn)的Windows定時(shí)關(guān)機(jī)工具的詳細(xì)內(nèi)容,更多關(guān)于PyQt5 Windows定時(shí)關(guān)機(jī)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Anaconda徹底刪除虛擬環(huán)境的正確方法

    Anaconda徹底刪除虛擬環(huán)境的正確方法

    這篇文章主要給大家介紹了關(guān)于Anaconda徹底刪除虛擬環(huán)境的正確方法,要在Anaconda中刪除一個(gè)虛擬環(huán)境,可以按照本文以下步驟進(jìn)行操作,需要的朋友可以參考下
    2023-10-10
  • python通過ElementTree操作XML

    python通過ElementTree操作XML

    這篇文章介紹了python通過ElementTree操作XML的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • python中cv2模塊安裝詳細(xì)圖文教程

    python中cv2模塊安裝詳細(xì)圖文教程

    在Python中cv2是OpenCV庫(kù)的一個(gè)模塊,這是一個(gè)開源的計(jì)算機(jī)視覺和機(jī)器學(xué)習(xí)軟件庫(kù),下面這篇文章主要給大家介紹了關(guān)于python中cv2模塊安裝的相關(guān)資料,需要的朋友可以參考下
    2024-05-05
  • NumPy庫(kù)中np.mean的具體使用

    NumPy庫(kù)中np.mean的具體使用

    np.mean?是 NumPy 庫(kù)中的一個(gè)函數(shù),用于計(jì)算給定數(shù)組或數(shù)組元素的算術(shù)平均值,本文主要介紹了NumPy庫(kù)中np.mean的具體使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04
  • 關(guān)于使用python反編譯apk簽名出包的問題

    關(guān)于使用python反編譯apk簽名出包的問題

    這篇文章主要介紹了使用python反編譯apk簽名出包,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Python中的序列化詳細(xì)解析

    Python中的序列化詳細(xì)解析

    這篇文章主要介紹了Python中的序列化詳細(xì)解析,序列化是指把程序中的一個(gè)類轉(zhuǎn)化成一個(gè)標(biāo)準(zhǔn)化的格式,標(biāo)準(zhǔn)化的意義是這個(gè)格式可以跨程序,跨平臺(tái)的被使用,而且保持其原有的內(nèi)容,規(guī)范,需要的朋友可以參考下
    2023-11-11
  • Python實(shí)現(xiàn)去除圖片中指定顏色的像素功能示例

    Python實(shí)現(xiàn)去除圖片中指定顏色的像素功能示例

    這篇文章主要介紹了Python實(shí)現(xiàn)去除圖片中指定顏色的像素功能,結(jié)合具體實(shí)例形式分析了Python基于pil與cv2模塊的圖形載入、運(yùn)算、轉(zhuǎn)換等相關(guān)操作技巧,需要的朋友可以參考下
    2019-04-04
  • 用python的seaborn畫數(shù)值箱型圖

    用python的seaborn畫數(shù)值箱型圖

    大家好,本篇文章主要講的是用python的seaborn畫數(shù)值箱型圖,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Python使用psutil庫(kù)實(shí)現(xiàn)系統(tǒng)監(jiān)控與管理詳解

    Python使用psutil庫(kù)實(shí)現(xiàn)系統(tǒng)監(jiān)控與管理詳解

    在我們的測(cè)試工作中,監(jiān)控和管理系統(tǒng)資源是一項(xiàng)重要的任務(wù),本文將介紹如何使用psutil庫(kù)來實(shí)現(xiàn)系統(tǒng)監(jiān)控和管理,以及一些實(shí)用的技巧和示例,希望對(duì)大家有所幫助
    2022-10-10
  • python把ipynb文件轉(zhuǎn)換成pdf文件過程詳解

    python把ipynb文件轉(zhuǎn)換成pdf文件過程詳解

    這篇文章主要介紹了用python把ipynb文件轉(zhuǎn)換成pdf文件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論