Pyqt5-定时截屏小工具V1.0-记录

Pyqt5-定时截屏工具V1.0



前言

主要为了记录截屏数据,包括:自动定时截图,自动循环定时截图,增加置顶显示字样等功能。


一、设计UI

  • 先通过designer工具设计UI界面,明确功能及其使用逻辑。
    在这里插入图片描述

1、先设计主界面UI,auto.ui文件如下:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>363</width>
    <height>450</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout_2">
    <item row="0" column="0">
     <widget class="QLabel" name="label">
      <property name="text">
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;时间选择:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
    <item row="0" column="1">
     <widget class="QComboBox" name="comboBox">
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>25</height>
       </size>
      </property>
      <item>
       <property name="text">
        <string>0.1</string>
       </property>
      </item>
      <item>
       <property name="text">
        <string>0.5</string>
       </property>
      </item>
      <item>
       <property name="text">
        <string>1</string>
       </property>
      </item>
      <item>
       <property name="text">
        <string>2</string>
       </property>
      </item>
      <item>
       <property name="text">
        <string>3</string>
       </property>
      </item>
     </widget>
    </item>
    <item row="0" column="2">
     <widget class="QLabel" name="label_5">
      <property name="text">
       <string>单位(小时)</string>
      </property>
     </widget>
    </item>
    <item row="1" column="0">
     <widget class="QLabel" name="label_2">
      <property name="text">
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;保存路径:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
    <item row="1" column="1" colspan="2">
     <widget class="QLineEdit" name="lineEdit">
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>25</height>
       </size>
      </property>
     </widget>
    </item>
    <item row="2" column="0">
     <widget class="QLabel" name="label_3">
      <property name="text">
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;开始时间:&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
    <item row="3" column="0">
     <widget class="QLabel" name="label_4">
      <property name="text">
       <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p align=&quot;center&quot;&gt;结束时间&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
    <item row="3" column="3">
     <widget class="QPushButton" name="pushButton_2">
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>25</height>
       </size>
      </property>
      <property name="maximumSize">
       <size>
        <width>100</width>
        <height>16777215</height>
       </size>
      </property>
      <property name="text">
       <string>启动</string>
      </property>
     </widget>
    </item>
    <item row="4" column="0" colspan="4">
     <widget class="QGroupBox" name="groupBox">
      <property name="maximumSize">
       <size>
        <width>16777215</width>
        <height>16777215</height>
       </size>
      </property>
      <property name="title">
       <string>显示</string>
      </property>
      <layout class="QGridLayout" name="gridLayout">
       <item row="0" column="0">
        <widget class="QTextBrowser" name="textBrowser"/>
       </item>
      </layout>
     </widget>
    </item>
    <item row="2" column="1" colspan="2">
     <widget class="QLineEdit" name="lineEdit_2">
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>25</height>
       </size>
      </property>
     </widget>
    </item>
    <item row="3" column="1" colspan="2">
     <widget class="QLineEdit" name="lineEdit_3">
      <property name="minimumSize">
       <size>
        <width>0</width>
        <height>25</height>
       </size>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>363</width>
     <height>23</height>
    </rect>
   </property>
   <widget class="QMenu" name="menu">
    <property name="title">
     <string>文件</string>
    </property>
   </widget>
   <addaction name="menu"/>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

2、将auto.ui文件,转化为py文件,Ui_auto.py文件如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'e:\自动化工作项目\定时自动截屏保存工具\UI\auto.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(363, 450)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setObjectName("label")
        self.gridLayout_2.addWidget(self.label, 0, 0, 1, 1)
        self.comboBox = QtWidgets.QComboBox(self.centralwidget)
        self.comboBox.setMinimumSize(QtCore.QSize(0, 25))
        self.comboBox.setObjectName("comboBox")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.comboBox.addItem("")
        self.gridLayout_2.addWidget(self.comboBox, 0, 1, 1, 1)
        self.label_5 = QtWidgets.QLabel(self.centralwidget)
        self.label_5.setObjectName("label_5")
        self.gridLayout_2.addWidget(self.label_5, 0, 2, 1, 1)
        self.label_2 = QtWidgets.QLabel(self.centralwidget)
        self.label_2.setObjectName("label_2")
        self.gridLayout_2.addWidget(self.label_2, 1, 0, 1, 1)
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setMinimumSize(QtCore.QSize(0, 25))
        self.lineEdit.setObjectName("lineEdit")
        self.gridLayout_2.addWidget(self.lineEdit, 1, 1, 1, 2)
        self.label_3 = QtWidgets.QLabel(self.centralwidget)
        self.label_3.setObjectName("label_3")
        self.gridLayout_2.addWidget(self.label_3, 2, 0, 1, 1)
        self.label_4 = QtWidgets.QLabel(self.centralwidget)
        self.label_4.setObjectName("label_4")
        self.gridLayout_2.addWidget(self.label_4, 3, 0, 1, 1)
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setMinimumSize(QtCore.QSize(0, 25))
        self.pushButton_2.setMaximumSize(QtCore.QSize(100, 16777215))
        self.pushButton_2.setObjectName("pushButton_2")
        self.gridLayout_2.addWidget(self.pushButton_2, 3, 3, 1, 1)
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.groupBox.setObjectName("groupBox")
        self.gridLayout = QtWidgets.QGridLayout(self.groupBox)
        self.gridLayout.setObjectName("gridLayout")
        self.textBrowser = QtWidgets.QTextBrowser(self.groupBox)
        self.textBrowser.setObjectName("textBrowser")
        self.gridLayout.addWidget(self.textBrowser, 0, 0, 1, 1)
        self.gridLayout_2.addWidget(self.groupBox, 4, 0, 1, 4)
        self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_2.setMinimumSize(QtCore.QSize(0, 25))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.gridLayout_2.addWidget(self.lineEdit_2, 2, 1, 1, 2)
        self.lineEdit_3 = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit_3.setMinimumSize(QtCore.QSize(0, 25))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.gridLayout_2.addWidget(self.lineEdit_3, 3, 1, 1, 2)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 363, 23))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar.addAction(self.menu.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">时间选择:</p></body></html>"))
        self.comboBox.setItemText(0, _translate("MainWindow", "0.1"))
        self.comboBox.setItemText(1, _translate("MainWindow", "0.5"))
        self.comboBox.setItemText(2, _translate("MainWindow", "1"))
        self.comboBox.setItemText(3, _translate("MainWindow", "2"))
        self.comboBox.setItemText(4, _translate("MainWindow", "3"))
        self.label_5.setText(_translate("MainWindow", "单位(小时)"))
        self.label_2.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">保存路径:</p></body></html>"))
        self.label_3.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">开始时间:</p></body></html>"))
        self.label_4.setText(_translate("MainWindow", "<html><head/><body><p align=\"center\">结束时间</p></body></html>"))
        self.pushButton_2.setText(_translate("MainWindow", "启动"))
        self.groupBox.setTitle(_translate("MainWindow", "显示"))
        self.menu.setTitle(_translate("MainWindow", "文件"))

3、设计透明显示字样的窗口,touming.ui文件如下;

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>show_window</class>
 <widget class="QMainWindow" name="show_window">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>974</width>
    <height>194</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <property name="styleSheet">
   <string notr="true">background-color: rgba(255, 255, 255, 0.5)</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <layout class="QGridLayout" name="gridLayout">
    <item row="0" column="0">
     <spacer name="verticalSpacer">
      <property name="orientation">
       <enum>Qt::Vertical</enum>
      </property>
      <property name="sizeHint" stdset="0">
       <size>
        <width>20</width>
        <height>0</height>
       </size>
      </property>
     </spacer>
    </item>
    <item row="1" column="0">
     <widget class="QTextEdit" name="textEdit">
      <property name="enabled">
       <bool>false</bool>
      </property>
      <property name="sizePolicy">
       <sizepolicy hsizetype="Expanding" vsizetype="Expanding">
        <horstretch>100</horstretch>
        <verstretch>0</verstretch>
       </sizepolicy>
      </property>
      <property name="acceptDrops">
       <bool>true</bool>
      </property>
      <property name="styleSheet">
       <string notr="true">background-color: rgb(255, 255, 255, 60);</string>
      </property>
      <property name="verticalScrollBarPolicy">
       <enum>Qt::ScrollBarAlwaysOff</enum>
      </property>
      <property name="horizontalScrollBarPolicy">
       <enum>Qt::ScrollBarAlwaysOff</enum>
      </property>
      <property name="lineWrapMode">
       <enum>QTextEdit::WidgetWidth</enum>
      </property>
      <property name="html">
       <string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'SimSun'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p align=&quot;center&quot; style=&quot;-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p align=&quot;center&quot; style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-size:72pt; font-weight:600; color:#ff0000;&quot;&gt;测试勿动&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
      </property>
     </widget>
    </item>
   </layout>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>974</width>
     <height>23</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

4、将touming.ui文件,转化为py文件,Ui_touming.py文件如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'e:\自动化工作项目\定时自动截屏保存工具\UI\touming.ui'
#
# Created by: PyQt5 UI code generator 5.15.9
#
# 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, QtWidgets


class Ui_show_window(object):
    def setupUi(self, show_window):
        show_window.setObjectName("show_window")
        show_window.resize(974, 194)
        show_window.setStyleSheet("background-color: rgba(255, 255, 255, 0.5)")
        self.centralwidget = QtWidgets.QWidget(show_window)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        spacerItem = QtWidgets.QSpacerItem(20, 0, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.gridLayout.addItem(spacerItem, 0, 0, 1, 1)
        self.textEdit = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit.setEnabled(False)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
        sizePolicy.setHorizontalStretch(100)
        sizePolicy.setVerticalStretch(0)
        sizePolicy.setHeightForWidth(self.textEdit.sizePolicy().hasHeightForWidth())
        self.textEdit.setSizePolicy(sizePolicy)
        self.textEdit.setAcceptDrops(True)
        self.textEdit.setStyleSheet("background-color: rgb(255, 255, 255, 60);")
        self.textEdit.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.textEdit.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.textEdit.setLineWrapMode(QtWidgets.QTextEdit.WidgetWidth)
        self.textEdit.setObjectName("textEdit")
        self.gridLayout.addWidget(self.textEdit, 1, 0, 1, 1)
        show_window.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(show_window)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 974, 23))
        self.menubar.setObjectName("menubar")
        show_window.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(show_window)
        self.statusbar.setObjectName("statusbar")
        show_window.setStatusBar(self.statusbar)

        self.retranslateUi(show_window)
        QtCore.QMetaObject.connectSlotsByName(show_window)

    def retranslateUi(self, show_window):
        _translate = QtCore.QCoreApplication.translate
        show_window.setWindowTitle(_translate("show_window", "MainWindow"))
        self.textEdit.setHtml(_translate("show_window", "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">\n"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'SimSun\'; font-size:9pt; font-weight:400; font-style:normal;\">\n"
"<p align=\"center\" style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><br /></p>\n"
"<p align=\"center\" style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-size:72pt; font-weight:600; color:#ff0000;\">测试勿动</span></p></body></html>"))

二、编写主界面控制程序

1.引入库和主程序,auto_time_screen.py:

# -*- coding: UTF-8 -*-
# 定时截屏工具
import time
import os,logging
from UI.Ui_auto import Ui_MainWindow
from UI.Ui_touming import Ui_show_window
import sys
from PyQt5.QtGui import QIcon,QDesktopServices,QFont # 用于添加图标
from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog,QMessageBox,QAction
from PyQt5.QtCore import pyqtSlot,QUrl,Qt
from datetime import datetime, timedelta
import traceback
from thread import RunThread
import threading
import os
import shutil
from configparser import ConfigParser

class show_test(QMainWindow, Ui_show_window): 
    def __init__(self):
        super().__init__() # 使用超类,继承父类的属性及方法
        self.setupUi(self) # 构造窗体界面
        self.init()
    

    def init(self):

        # 设置窗口样式表
        self.setStyleSheet("background-color: transparent;")
        self.textEdit.setStyleSheet("border:none;")
        self.textEdit.setFixedWidth(1900)  # 设置TextEdit的宽度为200像素
        self.textEdit.setFont(QFont("宋体",100)) #//设置字体和字体大小
        # 无边框        
        self.setWindowFlags(Qt.FramelessWindowHint)
        # self.setWindowOpacity(1) #设置透明度
  
        self.setAttribute(Qt.WA_TranslucentBackground)    # 设置透明
        self.setWindowFlag(Qt.WindowStaysOnTopHint, True) # 置顶
        
    def read_config(self):
        cp = ConfigParser()
        cp.read("./show_zi.ini",encoding="utf-8")
        # print(cp.items("config"))  # 获取cmd节点下的所有键值对
        # print(cp.sections())  # 获取所有的节点
        shuju = cp.get("config", "shuju")
        print(cp.get("config", "shuju"))  # 获取platformName的值

        self.textEdit.setText("<font color=\"#FF0000\">{}</font> ".format(shuju))
        self.setCentralWidget(self.textEdit)

        

class Auto_screen(QMainWindow, Ui_MainWindow): 
    def __init__(self):
        super().__init__() # 使用超类,继承父类的属性及方法
        self.setupUi(self) # 构造窗体界面
        self.setWindowIcon(QIcon("./IMG/icon.jpg"))
        self.setWindowTitle("定时截屏工具V1.0 ") # 设置窗体主体
        self.intUI()

    def intUI(self):
        # 初始化操作
        self.show_time()
        self.menu_add()
        self.shows = show_test()
    
    def show_time(self):
        self.get_time_thread()
        self.lineEdit_2.setReadOnly(True)
        self.lineEdit_3.setReadOnly(True)
        self.comboBox.setEditable(True)  
        path = os.getcwd() + "/保存/定时截图"
        if not os.path.isdir(path):
            os.makedirs(path)
        self.lineEdit.setText(path)
        self.comboBox.insertItem(0,"0.02")
        self.comboBox.setCurrentIndex(0)

    # 添加打开本地文件夹按钮
    def menu_add(self):
        add_opeen= QAction("打开",self)
        add_opeen.setShortcut('Ctrl+F')
        add_opeen.triggered.connect(self.open_local_file)
        # self.menu在本地QT内已经创建
        self.menu.addAction(add_opeen)

        add_opeen1= QAction("删除定时图片文件",self)
        add_opeen1.setShortcut('Ctrl+D')
        add_opeen1.triggered.connect(self.delate_local_file)
        self.menu.addAction(add_opeen1)

        # 添加菜单
        edit_menu = self.menubar.addMenu('工具')  
        self.add_opeens= QAction("截图启动时最小化",self)
        self.add_opeens.setCheckable(True)
        # add_opeens.triggered.connect(self.restartApp)
        edit_menu.addAction(self.add_opeens)

        self.add_chushiahu = QAction("初始化",self)
        self.add_chushiahu.triggered.connect(self.chushihua_anniu)
        # add_opeens.triggered.connect(self.restartApp)
        edit_menu.addAction(self.add_chushiahu)

        self.add_jietu = QAction("全屏截图",self)
        self.add_jietu.triggered.connect(self.jietu_all)
        # add_opeens.triggered.connect(self.restartApp)
        edit_menu.addAction(self.add_jietu)

        self.add_show = QAction("显示字样",self)
        self.add_show.setCheckable(True)
        self.add_show.triggered.connect(self.show_ziti)
        # add_opeens.triggered.connect(self.restartApp)
        edit_menu.addAction(self.add_show)

        self.add_autoanniu = QAction("循环截图",self)
        self.add_autoanniu.setCheckable(True)
        self.add_autoanniu.triggered.connect(self.circle)
        # add_opeens.triggered.connect(self.restartApp)
        edit_menu.addAction(self.add_autoanniu)

    # 循环截图
    def circle(self):
        try:
            if self.add_autoanniu.isChecked():
                if self.add_opeens.isChecked():
                    self.showMinimized()
                self.append_text(color="blue",result="开始循环截图...")
                test = threading.Thread(target=self.test_02,args="")
                test.start()

            else:
                print("结束流程!")
                self.thread_1.stop_auto_screen()
                self.pushButton_2.setEnabled(True)
                self.append_text(color="blue",result="循环截图停止!")
        except Exception as error:
            print(error)

    # 执行循环截图
    def circle_zhixing(self):
        self.pushButton_2.setEnabled(False)
        # 获取时间
        times_a = self.lineEdit_2.text()
        print(times_a)
        pass
        # 获取循环时间
        tims_add = self.comboBox.currentText()  # 单位小时

        self.thread_1 = RunThread(parent="circle_time",msg=[times_a,tims_add])
        self.thread_1.trigger.connect(self.send_information)
        self.thread_1.start()


    # 显示字样
    def show_ziti(self):
        if self.add_show.isChecked():
            self.shows.read_config()
            self.shows.show()
        else:
            self.shows.close()

    # 关闭响应事件
    def closeEvent(self, event):
        if self.add_show.isChecked():
            self.shows.close()

    # 删除定时截图图片
    def delate_local_file(self):
        path = os.getcwd() + "/保存/定时截图"
        shutil.rmtree(path)
        os.mkdir(path)
        self.append_text(color="blue",result="定时截图图片删除成功!")

    # 打开本地文件夹
    def open_local_file(self):
        path = os.getcwd()
        QDesktopServices.openUrl(QUrl.fromLocalFile(path))

    # 日志管理
    def save_log(self):
        # 1.创建一个logger(日志记录器)对象;
        my_logger = logging.Logger("first_logger")
        # 2.定义handler(日志处理器),决定把日志发到哪里;
        my_handler = logging.FileHandler('日志.log',encoding='utf-8')
        # 3.设置日志级别(level)和输出格式Formatters(日志格式器);
        my_handler.setLevel(logging.DEBUG)
        my_format = logging.Formatter("时间:%(asctime)s 函数名:%(funcName)s 日志信息:%(message)s 行号:%(lineno)d")
        # 把handler添加到对应的logger中去。
        my_handler.setFormatter(my_format)
        my_logger.addHandler(my_handler)

        # 使用:
        my_logger.info("程序已启动...")
        return my_logger

    @pyqtSlot()
    def on_pushButton_clicked(self):
        self.directory = QFileDialog.getExistingDirectory(self, "选择文件夹", "./")
        print(self.directory)
        self.lineEdit.setText(self.directory)

    def get_time_thread(self):
        self.thread_1 = RunThread(parent="get_time",msg=[])
        self.thread_1.trigger.connect(self.send_information)
        self.thread_1.start()

    def get_times(self):
        shijian = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        return shijian

    def send_information(self,text=[]):
        #接收信息
        time_now = self.get_times()
        if text[0] == "time":
            self.lineEdit_2.setText(text[1])
            # self.my_logger.info("单曲循环:")  startcircle
        elif text[0] == "startcircle":
            self.circle_zhixing()
        elif text[0] == "start_putton":
            self.pushButton_2.setEnabled(True)
            self.pushButton_2.setText("启动")
        elif  text[0] == "changd_anniu":
            self.control_anniu()
        elif text[0] == "info":
            self.textBrowser.append(time_now +":" + text[1])
        elif text[0] == "green":
            self.append_text(color="green",result=text[1])
        elif text[0] == "blue":
            self.append_text(color="blue",result=text[1])
        elif text[0] == "error_save":
            self.append_text(color="red",result=text[1])
        elif text[0] =="lineEdit_3":
            self.lineEdit_3.setText(text[1])
           
    @pyqtSlot()
    def on_pushButton_2_clicked(self):
        self.thread_1.control_an()
        test = threading.Thread(target=self.test_01,args="")
        test.start()

    # 启用线程
    def test_01(self):
        path = self.lineEdit.text()
        self.thread_1.first_screen(path=path)
        result_str = self.set_end_time()
        if path == "":
            reply = QMessageBox.information(self, "提示", "截图路径未选择!", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
            return
        self.thread_1.send_path(path=path)
        self.thread_1.change_ret(result_str)
    
     # 启用线程
    def test_02(self):
        path = self.lineEdit.text()
        self.thread_1.first_screens(path=path)
        result_str = self.set_end_time()
        if path == "":
            reply = QMessageBox.information(self, "提示", "截图路径未选择!", QMessageBox.Yes | QMessageBox.No, QMessageBox.Yes)
            return
        self.thread_1.send_path(path=path)
        self.thread_1.change_ret(result_str)


    # 手动全屏截图
    def jietu_all(self):
        shijian_get = 0.1
        if self.add_opeens.isChecked():
            self.showMinimized()
            shijian_get = 1
        time.sleep(0.5)
        self.thread_1.first_screen_click(shijian=shijian_get)
        time.sleep(2)
        self.showNormal()


    # 控制按钮
    def control_anniu(self):
        if self.add_opeens.isChecked():
            self.showMinimized()
        self.pushButton_2.setText("定时截图已启动")
        self.pushButton_2.setEnabled(False)
        self.append_text(color="green",result="启动定时截图...")

    # 初始化按钮
    def chushihua_anniu(self):
        self.append_text(color="blue",result="初始化启动截图按钮...")
        self.pushButton_2.setText("启动")
        self.pushButton_2.setEnabled(True)

    # 打印消息
    def append_text(self,color="info",result=""):
        time_now = self.get_times()
        if color == "info":
            self.textBrowser.append(time_now+":"+result)
        elif color == "blue":
            self.textBrowser.append("<font color=\"#0000FF\">{}:{}</font> ".format(time_now,result))
        elif color == "red":
            self.textBrowser.append("<font color=\"#FF0000\">{}:{}</font> ".format(time_now,result))
        elif color == "green":
            self.textBrowser.append("<font color=\"#00FF00\">{}:{}</font> ".format(time_now,result))

    def set_end_time(self):
        # 设置停止时间
        times_a = self.lineEdit_2.text()
        print(times_a)
        time_a=datetime.strptime(times_a,'%Y-%m-%d %H:%M:%S')
        # 获取添加时间
        tims_add = self.comboBox.currentText() #单位小时
        
        tims_add = float(tims_add)
        if tims_add < 1:
            shuju = int(tims_add*60)
            self.append_text(color="blue",result="{}分钟后进行截图...".format(shuju))
            # 时间相加
            result = time_a + timedelta(hours=0, minutes=shuju)
        elif tims_add  >= 1:
            shuju = int(tims_add)
            self.append_text(color="blue",result="{}小时后进行截图...".format(shuju))
            # 时间相加
            result = time_a + timedelta(hours=shuju, minutes=0)
        # 将结果转换为字符串
        result_str = result.strftime("%Y-%m-%d %H:%M:%S")
        # print("相加后的时间:", result_str)
        self.lineEdit_3.setText(result_str)
        return result_str


if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 设置应用程序的风格
    app.setStyle('Fusion')
    w = Auto_screen()
    w.show()
    sys.exit(app.exec_())



2.编写业务逻辑程序,thread.py:

from genericpath import isdir
from re import T
from tkinter import N
from PyQt5.QtCore import pyqtSignal,QThread
import traceback
import os
import time
import pyautogui
from datetime import datetime, timedelta

#业务线程
class RunThread(QThread):
    # 通过类成员对象定义信号对象
    # _signal = pyqtSignal(str)

    trigger = pyqtSignal(list)

    def __init__(self, parent=None,msg=None):
      super(RunThread, self).__init__()
      self.parent = parent
      self.msg = msg
      self.end_time = None
      self.paths = None
      self.ret2 = "biaozhi"

    # def __del__(self): #等待
    #   self.wait()    
    
    # 异常处理函数
    def yichangchuli(func=None):
        def deco(self,*args, **kwargs): 
            # print(func.__name__) #获取方法名称
            try:
                res = func(self,*args, **kwargs)
                return res 
            except Exception as error:
                error = traceback.format_exc()
                print("错误异常:",error)
                self.send_emit(change="error_save",result="{}".format(error))
        return deco
    
    '''处理业务逻辑'''
    @yichangchuli
    def run(self):
        #识别业务命令,在进行执行
        if self.parent == "get_time":
            self.get_time_return()
        elif self.parent == "circle_time":
            self.circle_time_return()

    # 定时截图
    def get_time_return(self):
        while True:
            time.sleep(0.1)
            shuju = self.get_times()
            # print(shuju)
            self.send_emit("time",shuju)
            if self.paths != None:
                # print('等待截图:...')
                # 时间进行判断,并截图,保存
                if shuju == self.end_time:
                    # 进行截图
                    '''
                    处理屏幕
                    ''' 
                    ## 截屏
                    im = pyautogui.screenshot()
                    ## 保存到本地
                    name = self.get_time_r()
                    im.save(self.paths+ "/{}.png".format(name))
                    self.send_emit("start_putton",result="")
                    self.send_emit("info",result="最终截图已完成-{}".format(self.paths + "/{}.png".format(name)))
                    self.paths = None

    # 循环时间截图
    def circle_time_return(self):
        firsime = self.msg[0]
        # return
        self.ret = True
        while self.ret:
            self.ret2 = "biaozhi"
            self.end_time = self.set_end_time(firstime=firsime,times_add=self.msg[1])
            print("结束时间:{}".format(self.end_time))
            while True:
                time.sleep(0.1)
                shuju = self.get_times()
                # print(shuju)
                self.send_emit("time",shuju)
                if self.ret2 != None:
                    # print('等待截图:...')
                    # 时间进行判断,并截图,保存
                    if shuju == self.end_time:
                        # 进行截图
                        '''
                        处理屏幕
                        ''' 
                        ## 截屏
                        im = pyautogui.screenshot()
                        ## 保存到本地
                        name = self.get_time_r()
                        im.save(self.paths+ "/{}.png".format(name))
                        time.sleep(0.8)
                        im.close()
                        # self.send_emit("start_putton",result="")
                        self.send_emit("info",result="截图已完成-{}".format(self.paths + "/{}.png".format(name)))
                        self.send_emit("green",result="==========================")
                        firsime = self.end_time
                        self.send_emit("blue",result="{}分钟后再次进行截图...".format(self.msg[1]))
                        break
                    # elif self.ret2 == "stop":        
                    #     break
        print("结束=======")         

    # 计算时间
    def set_end_time(self,firstime,times_add):
        # 设置停止时间
        times_a = firstime
        time_a=datetime.strptime(times_a,'%Y-%m-%d %H:%M:%S')
        # 获取添加时间
        tims_add = float(times_add)
        if tims_add < 1:
            shuju = int(tims_add*60)
            # 时间相加
            result = time_a + timedelta(hours=0, minutes=shuju)
        elif tims_add  >= 1:
            shuju = int(tims_add)
            # 时间相加
            result = time_a + timedelta(hours=shuju, minutes=0)
        # 将结果转换为字符串
        result_str = result.strftime("%Y-%m-%d %H:%M:%S")
        # print("相加后的时间:", result_str)
        self.send_emit("lineEdit_3",result="{}".format(result_str))
        return result_str

    
    # 直接截图
    def first_screen(self,path):   
        time.sleep(2)               
        im = pyautogui.screenshot()
        name = self.get_time_r()
        im.save(path + "/{}.png".format(name))
        self.send_emit("small_kou",result="")
        self.send_emit("info",result="初始截图已完成-{}".format(path + "/{}.png".format(name)))
        im.close()
        
    # 直接截图
    def first_screens(self,path):   
        time.sleep(2)               
        im = pyautogui.screenshot()
        name = self.get_time_r()
        im.save(path + "/{}.png".format(name))
        self.send_emit("small_kou",result="")
        self.send_emit("info",result="初始截图已完成-{}".format(path + "/{}.png".format(name)))
        im.close()
        self.send_emit("startcircle",result="")


    # 手动直接截图
    def first_screen_click(self,shijian=0.1):
        time.sleep(shijian)   
        path = os.getcwd()
        path = path + "./保存/手动全屏截图"
        if not os.path.isdir(path):
            os.makedirs(path)
        im = pyautogui.screenshot()
        name = self.get_time_r()
        im.save(path + "/{}.png".format(name))
        self.send_emit("small_kou",result="")
        self.send_emit("info",result="全屏截图已完成-{}".format(path + "/{}.png".format(name)))


    def get_times(self):
        shijian = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
        return shijian

    def get_time_r(self):
        shijian = time.strftime('%Y-%m-%d-%H-%M-%S', time.localtime())
        return shijian

    def change_ret(self,end_time):
        self.end_time = end_time

    def send_path(self,path):
        self.paths = path

    def control_an(self):
        self.send_emit("changd_anniu")

    def send_emit(self,change="info",result=""):
        self.trigger.emit([change, result])

    def stop_auto_screen(self):
        self.ret = False

演示:

在这里插入图片描述

  • 12
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山中坐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值