python做了个自动关机工具,再也不会耽误我下班啦

上班族经常会遇到这样情况,着急下班结果将关机误点成重启,或者临近下班又通知开会,开完会已经迟了还要去给电脑关机。

【阅读全文】

今天使用PyQt5做了个自动关机的小工具,设置好关机时间然后直接提交即可,下班就可以直接走人了。

有直接需要.exe可执行应用的话,直接到文末处获取下载链接!

自动关机小工具也支持了清除已经设置好的关机时间,防止已经设置好了关机时间重新调整时不知道怎么调整。

file

本应用除了使用os的python标准库来设置关机,还引入了PyQt5的桌面应用框架,通过实现自动设置关机命令以及清除操作来完成。

# Importing the QThread, QDateTime, and pyqtSignal classes from the PyQt5.QtCore module.
from PyQt5.QtCore import QThread, QDateTime, pyqtSignal

# Importing the QIcon and QFont classes from the PyQt5.QtGui module.
from PyQt5.QtGui import QIcon, QFont

# Importing the QWidget, QLabel, QDateTimeEdit, QPushButton, QFormLayout, and QApplication classes from the
# PyQt5.QtWidgets module.
from PyQt5.QtWidgets import QWidget, QLabel, QDateTimeEdit, QPushButton, QFormLayout, QApplication

# Importing the os, sys, and time modules.
import os, sys, time

# Importing the images.py file.
import images

创建CloseCompUI的class类,用来实现自动关机应用的页面布局,将UI相关以及对应的槽函数写到这个类中。

# This class is a widget that contains a button and a text box. When the button is clicked, the text box is filled with
# the closest company name to the one entered
class CloseCompUI(QWidget):
    def __init__(self):
        """
        A constructor. It is called when an object is created from a class and it allows the class to initialize the
        attributes of a class.
        """
        super(CloseCompUI, self).__init__()
        self.init_ui()

    def init_ui(self):
        """
        This function initializes the UI.
        """
        self.setWindowTitle('自动关机小工具  公众号:Python 集中营')
        self.setWindowIcon(QIcon(':/comp.ico'))
        self.setFixedWidth(380)
        self.setFixedHeight(120)

        self.is_close = False

        self.shutdown_time_lab = QLabel()
        self.shutdown_time_lab.setText('设置关机时间:')

        self.shutdown_time_in = QDateTimeEdit(QDateTime.currentDateTime())
        self.shutdown_time_in.setDisplayFormat('yyyy-MM-dd HH:mm:ss')
        self.shutdown_time_in.setCalendarPopup(True)

        self.submit_btn = QPushButton()
        self.submit_btn.setText('提交关机')
        self.submit_btn.clicked.connect(self.submit_btn_click)

        self.clear_btn = QPushButton()
        self.clear_btn.setText('清除关机')
        self.clear_btn.clicked.connect(self.clear_btn_click)

        self.show_message_lab = QLabel()
        self.show_message_lab.setText('更多免费小工具源码获取请前往公众号:Python 集中营!')
        self.show_message_lab.setFont(QFont('黑体', 8))

        fbox = QFormLayout()
        fbox.addRow(self.shutdown_time_lab, self.shutdown_time_in)
        fbox.setSpacing(15)
        fbox.addRow(self.clear_btn, self.submit_btn)
        fbox.addRow(self.show_message_lab)

        self.thread_ = CloseCompThread(self)
        self.thread_.message.connect(self.show_message_lab_click)

        self.setLayout(fbox)

上面的就是已经设置好的界面布局及需要的组件信息,然后将组件信息以及信号量关联到槽函数上实现相应的动态操作。

下面是所有相关的槽函数,同样这些槽函数是放在CloseCompUI的class中的。

def show_message_lab_click(self, message):
    self.show_message_lab.setText(message + ',公众号:Python 集中营!')

def submit_btn_click(self):
    if self.shutdown_time_in.text():
        self.is_close = True
        self.thread_.start()
    else:
        self.show_message_lab_click('请先设置关机时间')

def clear_btn_click(self):
    self.is_close = False
    self.thread_.start()

创建CloseCompThread的class类,作为单独的子线程独立运行不影响主线程的执行,将所有的业务模块(具体的关机实现)写到该线程中。

# This class is a QThread that runs a function that takes a list of strings and returns a list of strings
class CloseCompThread(QThread):
    message = pyqtSignal(str)

    def __init__(self, parent=None):
        """
        A constructor that initializes the class.

        :param parent: The parent widget
        """
        super(CloseCompThread, self).__init__(parent)
        self.parent = parent
        self.working = True

    def __del__(self):
        """
        If the shutdown time is set, the shutdown thread is started, otherwise the message is displayed
        """
        self.working = False
        self.wait()

    def run(self):
        """
        *|CURSOR_MARCADOR|*
        """
        try:
            is_close = self.parent.is_close
            print(is_close)
            if is_close is True:
                shutdown_time_in = self.parent.shutdown_time_in.text()
                t = time.strptime(shutdown_time_in, "%Y-%m-%d %H:%M:%S")
                t1 = int(time.mktime(t))
                t0 = int(time.time())
                num = t1 - t0
                if num > 0:
                    os.system('shutdown -s -t %d' % num)
                    self.message.emit("此电脑将在%s关机" % shutdown_time_in)
                else:
                    self.message.emit("关机时间不能小于当前操作系统时间")
            else:
                os.system('shutdown -a')
                self.message.emit("已经清除自动关机设置")
        except:
            self.message.emit("提交/清除自动关机出现错误")

开发子线程CloseCompThread的业务实现后基本上已经大功告成了,接下来使用main函数直接整个桌面启动就OK了。

# A common idiom in Python to use this to guard the main body of your code.
if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = CloseCompUI()
    main.show()
    sys.exit(app.exec_())

上述自动关机小工具应用中所有的代码块已经过测试,可以直接启动使用。应用中只使用了一个PyQt5的python非标准库需要安装,其他的不需要安装。

在公众号内回复'关机小助手'即可获取exe可执行桌面应用的百度网盘的下载链接,请大家按需下载后直接在电脑上双击运行即可,欢迎留言交流!

【往期精彩】

Python 集中营【数据处理图书推荐】

吐血整理python数据分析利器pandas的八个生命周期!

五个最佳的python在线开发工具,看看是否能满足你的开发需求?

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python做了个自动关机工具,再也不会耽误我下班啦 - Python技术站

(0)
上一篇 2023年4月2日 下午4:38
下一篇 2023年4月2日

相关文章

  • python 一行命令开启网络间的文件共享

    这个文件共享的功能是基于python实现,所以必须具备python环境。没有python环境的直接到官网去下载就可以了,这里分享一下官网的下载地址。 【阅读全文】 https://www.python.org/getit/ 准备好了python环境就可以进入正式环节了。 创建一个文件夹专门用来存放需要共享的文件,注意这里的共享文件最好使用压缩包的方式这样其他…

    2023年4月2日
    00
  • 英语没学好到底能不能做coder,别再纠结了先学起来

    其实,编程中用到的英文词汇并不多,经常用到的写着写着就记住了。大多数时候只有给变量或者对象起名的时候才会去Google上查。于是,我将经常在coding中用到的词汇总结了一下。 【阅读全文】 A字母开头的英文词汇 Appearance外表assert/assertion异常add添加append附加args/argument参数attribute属性 B字母…

    2023年4月2日
    00
  • 两个库搞定python中引用javascript代码块/文件

    在一些特殊的python应用场景下需要逆向执行javascript代码块或者.js文件,比如:爬虫的时候下载下来的html页面中包含你要逆向执行的js代码块。 【阅读全文】 在python编程中提供了两个非标准库js2py与PyExecJS都能实现在python中运行代码块的效果的。 1、js2py的使用过程 js2py适用于js代码少量情况,如果用于很长的…

    2023年4月2日
    00
  • python如何实现网络测试,了解一下speedtest-cli…

    它是一款面向开发人员的互联网连接测量工具。Speedtest CLI 为命令行带来 Speedtest 背后的可信技术和全球服务器网络。 【阅读全文】 Speedtest CLI 专为软件开发人员、系统管理员和计算机爱好者等打造,是 Ookla® 提供技术支持的首款正式 Linux 本机 Speedtest 应用程序。 Speedtest CLI是使用pyt…

    2023年4月2日
    00
  • 自动化办公:手机号码提取器,使用正则表达式轻松提取文本文件中的手机号码

    关于手机号码的提取,其实真正有用的部分就是re模块提供的正则表达式。使用正则表达式就能轻松地匹配到手机号码,由于功能比较简单这次并没有采用UI界面的方式来实现该功能。 【阅读全文】 第一步:写一个控制台输入函数。 path = input(‘请输入需要提取手机号码的文件路径(.txt):n’) 第二步:读取包含手机号码的文本文件。 def read_text…

    2023年4月2日
    00
  • 又是樱花盛开的季节,使用小乌龟来画一颗樱花树吧

    【阅读全文】 后唐李煜曾说道,樱花落尽春将困,秋千架下归时。漏暗斜月迟迟,花在枝。樱花落尽的时候春天也将过去了,秋千架下归去时。天上的斜月姗姗来迟,花还在枝头。 关于python画图相关的,我们一直使用的是turtle来画,用专业的非标准库来做专业的事儿。将需要使用到的内置库或者非标准库全部都导入到当前的代码块中。 from time import slee…

    2023年4月2日
    00
  • python-turtle绘制雪容融,已打包成exe可直接运行

    之前我们放出了冰墩墩绘制的源代码,雪容融的绘制却是一直没有。今天在逛论坛的时候终于发现有大佬写出来了,给大佬递茶!先来看看绘制的效果如何,个人觉得还是很惟妙惟肖的,哈哈哈~ 阅读全文 由于本文主要是通过图片的方式来展示代码块的实现过程的,需要完整源代码请前往文末查看源代码的获取方式。 话不多说,我们直接进入主题,说明一下我们改造以后的源代码,绘图的非标准库这…

    2023年4月2日
    00
  • 数据清洗工具flashtext,效率直接提升了几十倍数

    在平常的一些的小规模的数据的过滤、清洗过程中使用最多的就是正则表达式,但是随着数据规模的增大,正则表达式就显得有些心有余力不足了。 【阅读全文】 正则表达式在一个 10k 的词库中查找 15k 个关键词的时间差不多是 0.165 秒。但是对于 Flashtext 而言只需要 0.002 秒。因此,在这个问题上 Flashtext的速度大约比正则表达式快 82…

    2023年4月2日
    00
合作推广
合作推广
分享本页
返回顶部