Python+PyQt构建自动化定时任务执行工具
目录
一、引言
二、GUI界面设计
1.效果演示
2.相关提示
3.界面设计.py
三、主要程序详解
1.导入相关模块
2.初始化设置
3.上传待执行程序文件
4.时间选择方式——详尽
5.时间选择方式——详尽(“日”选项的设置)
6.时间选择方式——粗略
7.时间选择方式——粗略(检测选项变化)
8.开始倒计时
9.自定义函数
四、总程序代码
一、引言
在数字化转型加速的今天,自动化执行程序已成为提升工作效率的关键技术。Python凭借其简洁灵活的语法和丰富的生态库,成为开发定时任务工具的首选语言;而PyQt作为成熟的跨平台GUI框架,则为工具提供了直观的用户交互界面。将二者结合构建的自动化定时任务执行器,不仅能实现精准的任务触发与循环控制,还能通过可视化配置降低使用门槛。
二、GUI界面设计
使用PyQt5进行界面的搭建,界面如下:
初始界面搭建采用极简风格。用户通过点击“上传待执行的程序”上传.exe程序文件(自动弹出文件选择对话框),再选择不同的定时方式(详尽:精确到年月日时分秒,均可自定义;粗略:提供3秒后、5秒后、10秒后、30秒后、1分钟后、3分钟后、5分钟后、10分钟后、30分钟后、1小时后多种选项),最后点击“开始倒计时”,即可在实现在指定时间运行指定程序的功能。
1.效果演示
这里以“360浏览器.exe”为实例,选择相应启动方式,若时间未过期,点击“开始倒计时”,即可在对应时间到达后自动打开360浏览器。
2.相关提示
若未上传.exe可执行文件,直接点击“开始倒计时”,会有以下提示。
若未设置时间(两种方式任选其一),直接点击“开始倒计时”,会有以下提示。
若设置时间符合要求,直接点击“开始倒计时”,会有以下提示。
针对“详尽”方式,尤其要把握精确时间,若自定义的时间小于当前时间,则程序不能成功执行,且会有以下提示。
3.界面设计.py
通过pyuic5产生的GUI界面代码UI_Main.py如下:
# -*- coding: utf-8 -*-# Form implementation generated from reading ui file 'UI_main.ui'
#
# Created by: PyQt5 UI code generator 5.15.11
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.from PyQt5 import QtCore, QtGui, QtWidgetsclass Main_Form(object):def setupUi(self, Form):Form.setObjectName("Form")Form.setEnabled(True)Form.resize(400, 500)Form.setMinimumSize(QtCore.QSize(400, 500))Form.setMaximumSize(QtCore.QSize(400, 500))icon = QtGui.QIcon()icon.addPixmap(QtGui.QPixmap(":/image1.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)Form.setWindowIcon(icon)self.label_5 = QtWidgets.QLabel(Form)self.label_5.setGeometry(QtCore.QRect(230, 70, 141, 31))font = QtGui.QFont()font.setFamily("Adobe Arabic")font.setPointSize(16)self.label_5.setFont(font)self.label_5.setObjectName("label_5")self.label_8 = QtWidgets.QLabel(Form)self.label_8.setGeometry(QtCore.QRect(80, 10, 261, 61))font = QtGui.QFont()font.setFamily("字魂5号-无外润黑体")font.setPointSize(26)font.setBold(False)font.setWeight(50)self.label_8.setFont(font)self.label_8.setObjectName("label_8")self.label_10 = QtWidgets.QLabel(Form)self.label_10.setGeometry(QtCore.QRect(310, 60, 71, 51))self.label_10.setText("")self.label_10.setPixmap(QtGui.QPixmap(":/image1.png"))self.label_10.setObjectName("label_10")self.label_3 = QtWidgets.QLabel(Form)self.label_3.setGeometry(QtCore.QRect(20, 210, 181, 21))font = QtGui.QFont()font.setFamily("新宋体")font.setPointSize(12)self.label_3.setFont(font)self.label_3.setObjectName("label_3")self.pushButton_2 = QtWidgets.QPushButton(Form)self.pushButton_2.setGeometry(QtCore.QRect(80, 400, 291, 23))font = QtGui.QFont()font.setFamily("新宋体")self.pushButton_2.setFont(font)self.pushButton_2.setObjectName("pushButton_2")self.label_4 = QtWidgets.QLabel(Form)self.label_4.setGeometry(QtCore.QRect(150, 288, 21, 21))font = QtGui.QFont()font.setFamily("新宋体")self.label_4.setFont(font)self.label_4.setObjectName("label_4")self.comboBox = QtWidgets.QComboBox(Form)self.comboBox.setGeometry(QtCore.QRect(90, 288, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox.setFont(font)self.comboBox.setObjectName("comboBox")self.label_6 = QtWidgets.QLabel(Form)self.label_6.setGeometry(QtCore.QRect(250, 288, 21, 21))font = QtGui.QFont()font.setFamily("新宋体")self.label_6.setFont(font)self.label_6.setObjectName("label_6")self.comboBox_2 = QtWidgets.QComboBox(Form)self.comboBox_2.setGeometry(QtCore.QRect(190, 288, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_2.setFont(font)self.comboBox_2.setObjectName("comboBox_2")self.label_7 = QtWidgets.QLabel(Form)self.label_7.setGeometry(QtCore.QRect(350, 290, 16, 20))font = QtGui.QFont()font.setFamily("新宋体")self.label_7.setFont(font)self.label_7.setObjectName("label_7")self.radioButton = QtWidgets.QRadioButton(Form)self.radioButton.setGeometry(QtCore.QRect(20, 250, 51, 21))font = QtGui.QFont()font.setFamily("新宋体")self.radioButton.setFont(font)self.radioButton.setObjectName("radioButton")self.radioButton_2 = QtWidgets.QRadioButton(Form)self.radioButton_2.setGeometry(QtCore.QRect(20, 350, 51, 21))font = QtGui.QFont()font.setFamily("新宋体")self.radioButton_2.setFont(font)self.radioButton_2.setObjectName("radioButton_2")self.comboBox_4 = QtWidgets.QComboBox(Form)self.comboBox_4.setGeometry(QtCore.QRect(90, 350, 261, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_4.setFont(font)self.comboBox_4.setObjectName("comboBox_4")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_4.addItem("")self.comboBox_3 = QtWidgets.QComboBox(Form)self.comboBox_3.setGeometry(QtCore.QRect(290, 288, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_3.setFont(font)self.comboBox_3.setObjectName("comboBox_3")self.pushButton_4 = QtWidgets.QPushButton(Form)self.pushButton_4.setGeometry(QtCore.QRect(80, 440, 291, 23))font = QtGui.QFont()font.setFamily("新宋体")self.pushButton_4.setFont(font)self.pushButton_4.setObjectName("pushButton_4")self.label_9 = QtWidgets.QLabel(Form)self.label_9.setGeometry(QtCore.QRect(80, 240, 291, 81))self.label_9.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_9.setText("")self.label_9.setObjectName("label_9")self.label_11 = QtWidgets.QLabel(Form)self.label_11.setGeometry(QtCore.QRect(80, 340, 291, 41))self.label_11.setFrameShape(QtWidgets.QFrame.StyledPanel)self.label_11.setText("")self.label_11.setObjectName("label_11")self.label_13 = QtWidgets.QLabel(Form)self.label_13.setGeometry(QtCore.QRect(20, 120, 201, 21))font = QtGui.QFont()font.setFamily("新宋体")font.setPointSize(12)self.label_13.setFont(font)self.label_13.setObjectName("label_13")self.pushButton_5 = QtWidgets.QPushButton(Form)self.pushButton_5.setGeometry(QtCore.QRect(80, 150, 291, 23))font = QtGui.QFont()font.setFamily("新宋体")self.pushButton_5.setFont(font)self.pushButton_5.setObjectName("pushButton_5")self.comboBox_5 = QtWidgets.QComboBox(Form)self.comboBox_5.setGeometry(QtCore.QRect(90, 250, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_5.setFont(font)self.comboBox_5.setObjectName("comboBox_5")self.label_14 = QtWidgets.QLabel(Form)self.label_14.setGeometry(QtCore.QRect(150, 250, 21, 21))font = QtGui.QFont()font.setFamily("新宋体")self.label_14.setFont(font)self.label_14.setObjectName("label_14")self.comboBox_6 = QtWidgets.QComboBox(Form)self.comboBox_6.setGeometry(QtCore.QRect(190, 250, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_6.setFont(font)self.comboBox_6.setObjectName("comboBox_6")self.label_15 = QtWidgets.QLabel(Form)self.label_15.setGeometry(QtCore.QRect(250, 250, 21, 21))font = QtGui.QFont()font.setFamily("新宋体")self.label_15.setFont(font)self.label_15.setObjectName("label_15")self.label_16 = QtWidgets.QLabel(Form)self.label_16.setGeometry(QtCore.QRect(350, 250, 21, 21))font = QtGui.QFont()font.setFamily("新宋体")self.label_16.setFont(font)self.label_16.setObjectName("label_16")self.comboBox_7 = QtWidgets.QComboBox(Form)self.comboBox_7.setGeometry(QtCore.QRect(290, 250, 61, 22))font = QtGui.QFont()font.setFamily("新宋体")self.comboBox_7.setFont(font)self.comboBox_7.setObjectName("comboBox_7")self.label_11.raise_()self.label_9.raise_()self.label_5.raise_()self.label_8.raise_()self.label_10.raise_()self.label_3.raise_()self.pushButton_2.raise_()self.label_4.raise_()self.comboBox.raise_()self.label_6.raise_()self.comboBox_2.raise_()self.label_7.raise_()self.radioButton.raise_()self.radioButton_2.raise_()self.comboBox_4.raise_()self.comboBox_3.raise_()self.pushButton_4.raise_()self.label_13.raise_()self.pushButton_5.raise_()self.comboBox_5.raise_()self.label_14.raise_()self.comboBox_6.raise_()self.label_15.raise_()self.label_16.raise_()self.comboBox_7.raise_()self.retranslateUi(Form)self.pushButton_4.clicked.connect(Form.close) # type: ignoreQtCore.QMetaObject.connectSlotsByName(Form)def retranslateUi(self, Form):_translate = QtCore.QCoreApplication.translateForm.setWindowTitle(_translate("Form", "Timer_exe"))self.label_5.setText(_translate("Form", "Designed By"))self.label_8.setText(_translate("Form", "程序定时执行器"))self.label_3.setText(_translate("Form", "二、设置程序启动时间"))self.pushButton_2.setText(_translate("Form", "开始倒计时"))self.label_4.setText(_translate("Form", "时"))self.label_6.setText(_translate("Form", "分"))self.label_7.setText(_translate("Form", "秒"))self.radioButton.setText(_translate("Form", "详尽"))self.radioButton_2.setText(_translate("Form", "粗略"))self.comboBox_4.setItemText(0, _translate("Form", "请选择"))self.comboBox_4.setItemText(1, _translate("Form", "3秒后"))self.comboBox_4.setItemText(2, _translate("Form", "5秒后"))self.comboBox_4.setItemText(3, _translate("Form", "10秒后"))self.comboBox_4.setItemText(4, _translate("Form", "30秒后"))self.comboBox_4.setItemText(5, _translate("Form", "1分钟后"))self.comboBox_4.setItemText(6, _translate("Form", "3分钟后"))self.comboBox_4.setItemText(7, _translate("Form", "5分钟后"))self.comboBox_4.setItemText(8, _translate("Form", "10分钟后"))self.comboBox_4.setItemText(9, _translate("Form", "30分钟后"))self.comboBox_4.setItemText(10, _translate("Form", "1个小时后"))self.pushButton_4.setText(_translate("Form", "退出系统"))self.label_13.setText(_translate("Form", "一、选择定时执行程序"))self.pushButton_5.setText(_translate("Form", "选择待执行的程序"))self.label_14.setText(_translate("Form", "年"))self.label_15.setText(_translate("Form", "月"))self.label_16.setText(_translate("Form", "日"))
import ziyuan_rc
三、主要程序详解
1.导入相关模块
import sys, time, os
from UI_main import *
from PyQt5.QtWidgets import QApplication, QWidget
# 保持窗口大小和qtdesigner中的一致
from PyQt5 import QtCore
QtCore.QCoreApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
time模块与时间设置有关;os模块与启动运行程序文件有关;UI_main是界面设计文件; 不懂为啥需要导入Qtcore的,请看