上班族经常会遇到这样的情况。当他们急于下班时,他们会延迟关机和重启,或者在他们接近工作时通知他们开会。会议已经很晚了还要关电脑。[阅读全文]今天用PyQt5做了一个自动关机的小工具,设置关机时间直接提交,下班就可以直接离开。如果直接需要.exe可执行应用程序,直接到文末获取下载链接!自动关机小工具还支持清除已设置的关机时间,防止您在设置关机时间后重新调整时不知道如何调整。本应用除了使用os的python标准库设置关机外,还引入了PyQt5的桌面应用框架,通过自动设置关机命令和清除操作来完成。#从PyQt5.QtCore模块中导入QThread、QDateTime和pyqtSignal类。fromPyQt5.QtCoreimportQThread、QDateTime、pyqtSignal#从PyQt5.QtGui模块中导入QIcon和QFont类。fromPyQt5.QtGuiimportQIcon、QFont#从#PyQt5.QtWidgets模块导入QWidget、QLabel、QDateTimeEdit、QPushButton、QFormLayout和QApplication类。fromPyQt5.QtWidgetsimportQWidget,QLabel,QDateTimeEdit,QPushButton,QFormLayout,QApplication#导入操作系统、系统和时间。importos,sys,time#importingtheimages.pyfile.importimages创建CloseCompUI类类,用于实现自动关机应用的页面布局,将UI相关及对应的槽函数写入该类。#此类是一个包含按钮和文本框的小部件。单击按钮时,文本框将填充#与输入的公司名称最接近的公司名称类CloseCompUI(QWidget):def__init__(self):"""构造函数。当从类创建对象时调用它,并且它允许类初始化类的属性。"""super(CloseCompUI,self).__init__()self.init_ui()definit_ui(self):"""此函数初始化UI。"""self.setWindowTitle('自动关机小工具公众号:Python集中营')self.setWindowIcon(QIcon(':/comp.ico'))self.setFixedWidth(380)self.setFixedHeight(120)self.is_close=Falseself.shutdown_time_lab=QLabel()self.shutdown_time_lab.setText('设置关机时间:')self.shutdown_time_in=QDateTimeEdit(QDateTime.currentDateTime())self.shutdown_time_in.setDisplayFormat('yyyy-MM-ddHH: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)自我.setLayout(fbox)以上是已经设置好的界面布局和需要的组件信息,然后将组件信息和信号量关联到槽函数实现相应的动态操作下面都是相关的槽函数,这些槽函数也都放在了CloseCompUI类中。defshow_message_lab_click(self,message):self.show_message_lab.setText(message+',公众号:Python集中营!')defsubmit_btn_click(self):ifself.shutdown_time_in.text():self.is_close=Trueself.thread_.start()else:self.show_message_lab_click('请先设置关机时间')defclear_btn_click(self):self.is_close=Falseself.thread_.start()创建CloseCompThread的class类,作为一个单独的单独运行子线程影响主线程的执行,将所有的业务模块(具体的shutdown实现)写入到这个线程中。#此类是一个QThread,它运行一个接受字符串列表并返回字符串列表的函数classCloseCompThread(QThread):message=pyqtSignal(str)def__init__(self,parent=None):""":paramparent:父控件"""super(CloseCompThread,self).__init__(parent)self.parent=parentself.working=Truedef__del__(self):"""如果设置了关闭时间,关闭线程启动,否则显示消息"""self.working=Falseself.wait()defrun(self):"""*|CURSOR_MARCADOR|*"""try:is_close=self.parent.is_closeprint(is_close)如果is_close为真: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-t0ifnum>0:os.system('shutdown-s-t%d'%num)self.message.emit("Thiscomputerwillbeshutdownat%s"%shutdown_time_in)else:self.message.emit("关机时间不能小于当前操作系统时间")else:os.system('shutdown-a')self.message.emit("自动关机设置已清除")except:self.message.emit("提交/清除自动关闭有错误")开发完子线程CloseCompThread的业务,基本就搞定了。接下来用main函数直接启动整个桌面就OK了。#Python中的一个常见习语,使用它来保护代码的主体。if__name__=='__main__':app=QApplication(sys.argv)main=CloseCompUI()main.show()sys.exit(app.exec_())以上自动关机小部件应用程序中的所有代码块都已经过测试,可以直接启动。应用中只需要安装一个PyQt5的非标准python库,其他的不需要安装。在回复‘关机助手’,获取exe可执行桌面应用程序百度网盘下载地址。请根据需要下载并在电脑上双击运行。欢迎留言交流!【往期精品】Python集中营【数据处理书籍推荐】吐血整理pandas的八个生命周期,python数据分析的利器!五款最好用的python在线开发工具,看看能不能满足你的开发需求?
