最近通过 PyQt5 设计了一个下载服务器指定日期日志文件的程序,里面有些有意思的技术点,现在做一些分享 。
PyQt5 是一套 Python 绑定 Digia Qt5 应用的框架 , 是最强大的 GUI 库之一,使用 PyQt5 我们能够很容易的开发桌面应用,接下来我们将用它来开发一个下载服务器日志文件的小程序 。
前期准备软件
- QT5Python 模块
- PyQt5==5.15.7
- paramiko==2.9.2PyCharm 添加扩展工具 PyUICPyUIC 扩展用于将使用 Qt Designer 生成的 ui 文件转成 py 文件,可以在 PyCharm 中通过 Preferences-Tools-External Tools 进行配置,截图如下:
![【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序](http://img.zhejianglong.com/231019/2104005912-0.jpg)
文章插图
Program:/Users/macbookpro/workspace/projects/DownloadServerLog/venv/bin/python3.9Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.pyWorking directory:/Users/macbookpro/workspace/projects/DownloadServerLog/ui
实操步骤1. 创建项目创建 DownloadServerLog 项目,设计程序结构如下:DownloadServerLog├── app│├── downloadlog.py│└── downloadlog_qtui.py├── main.py└── ui│└── downloadlog_qtui.ui├── .env
main.py 作为程序入口文件,.env 存放环境变量,ui 存放使用 Qt Designer 设计界面导出的源码文件,app 存放下载程序文件 。2.使用 QtDesigner 设计界面Qt Designer 使用起来非常简单,可以通过“拖拉拽”的形式生成 UI 界面(文档:https://doc.qt.io/qtcreator/creator-using-qt-designer.html),设计界面如下:
![【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序](http://img.zhejianglong.com/231019/2104001137-1.png)
文章插图
这个程序功能一目了然 , 左侧几个输入框用于输入必要的信息 , 右侧一个展示框用于展示程序实时日志 。界面设计好后可以将其保存至项目 DownloadServerLog 下的 ui 目录下 downloadlog_qtui.ui,供后续使用 。
3. 使用 ui 生成对应的 py 文件使用 PyCharm 打开项目,在 downloadlog_qtui.ui 文件上右键 , 选择 External Tools 使用 PyUIC 根据 ui 文件生成对应的 py 文件 downloadlog_qtui.py , 将文件存放至 app 目录 。
![【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序](http://img.zhejianglong.com/231019/2104001428-2.png)
文章插图
4. 新建 main.py 作为程序入口在项目根目录下创建 main.py 文件:
【【实操日记】使用 PyQt5 设计下载远程服务器日志文件程序】
import sysfrom PyQt5 import QtCorefrom PyQt5.QtCore import QObject, pyqtSignalfrom PyQt5.QtWidgets import QApplication, QMainWindowfrom threading import Threadfrom app.downloadlog_qtui import Ui_Dialogfrom app.downloadlog import DownloadLogclass CommunicateSignal(QObject):text_print = pyqtSignal(str)# MyWindow 是主窗口程序 , 继承自 PyQt5.QtWidgets.QMainWindow# 和通过 ui 文件生成的 downloadlog_qtui.py 中的 Ui_Dialog 类class MyWindow(QMainWindow, Ui_Dialog):def __init__(self, parent=None):super().__init__(parent)self.setupUi(self)self.btn_download.clicked.connect(self.click_download)# 自定义信号处理函数self.comm_signal = CommunicateSignal()self.comm_signal.text_print.connect(self.show_text)self.set_window_init_data()def set_window_init_data(self):"""设置程序窗体初始值"""# 从 .env 读取环境变量result_dict = dict()with open('.env', 'r', encoding='utf-8') as f:for line in f.readlines():key = line.split('=')[0].strip()value = https://www.huyubaike.com/biancheng/line.split('=')[-1].strip()result_dict[key] = value# 设置输入框值_translate = QtCore.QCoreApplication.translateself.host.setText(_translate("Dialog", result_dict.get("HOST", '')))self.port.setText(_translate("Dialog", result_dict.get("PORT", '22')))self.username.setText(_translate("Dialog", result_dict.get("USERNAME", 'root')))self.password.setText(_translate("Dialog", result_dict.get("PASSWORD", '')))self.directory.setPlainText(_translate("Dialog", result_dict.get("DIRECTORY", '')))self.startTime.setDate(QtCore.QDate.currentDate())self.endTime.setDate(QtCore.QDate.currentDate())def get_window_input_value(self):"""获取程序各「输入框」组件值"""return {"host": self.host.text(),"port": self.port.text(),"username": self.username.text(),"password": self.password.text(),"directory": self.directory.toPlainText(),"start_time": self.startTime.date().toString("yyyy-MM-dd"),"end_time": self.endTime.date().toString("yyyy-MM-dd"),"suffix": ".log",}def show_text(self, text):"""将文本内容追加到程序「展示框」"""self.textBrowser.append(text)def click_download(self):"""处理点击「下载」按钮事件"""params = self.get_window_input_value()def run():res = DownloadLog(conn_type='ssh', comm_signal=self.comm_signal, **params)res.main()t = Thread(target=run)t.start()if __name__ == '__main__':app = QApplication(sys.argv)myWin = MyWindow()myWin.show()sys.exit(app.exec_())
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 【lwip】11-UDP协议&源码分析
- 【什么是妖股】妖股是什么意思
- .net 温故知新:【9】.NET日志记录 ILogger使用和原理
- 【k8s连载系列】2. k8s整体架构
- 安卓手机截屏模式怎么设置(手机截屏模式怎么设置)
- ubantu18.04@Intel 82545EM 【安装文档】TRex流量分析仪保姆级安装指南--基于VMware虚拟机
- 星之彼端丹铜事件该如何选择
- iphone怎么刷机(iphone刷机教程)
- 《正义联盟》中超人是怎么死的
- 王者荣耀娜可露露前尘镜中文语音包怎么设置