精通Python自动化脚本-运维人员宝典完整目录:
第一章 Python脚本概述
第二章 Python脚本调试和性能测试
第三章 单元测试-单元测试框架的介绍
第四章 自动化常规运维活动
第五章 文件、目录和数据处理
第六章 文件存档、加密和解密
第七章 文本处理和正则表达式
第八章 文档和报告
第九章 操作各类文件
第十章 网络基础 – Socket编程
第十一章 使用Python脚本处理邮件
第十二章 使用Telnet和SSH远程监控主机
第十三章 创建图形化用户界面
第十四章 处理Apache和其它的日志文件
第十五章 SOAP和REST API通讯
第十六章 网络抓取 – 从网站上提取有用的信息
第十七章 数据收集及报表
第十八章 MySQL和SQLite数据库管理
本章中我们将学习图形化用户界面(GUI) 的开发。Python有很多库来用于制作GUI。我们将学习PyQt5这一Python库来创建GUI。
本章中我们将学习如下课题:
- GUI图形界面简介
- 使用库来创建基于GUI的应用
- 安装和使用 Apache Log Viewer应用
译者注:本章涉及到图形化界面,请在自己的 Windows 或 Mac 上进行测试
GUI图形界面简介
这一部分中我们将学习GUI。Python有很多图形化界面的框架。这一部分中我们来看看PyQt5。PyQt5有不同的图形组件,也称为对象工具,可以在屏幕上显示并与用户进行交互 。这些组件列出如下:
- PyQt5窗口: PyQt5窗口(window)将创建一个简单的app窗口
- PyQt5按钮: PyQt5按钮(button)是在点击时会触发动作的按钮
- PyQt5文本框: PyQt5文本框(textbox)组件允许用户输入文本
- PyQt5落地签: PyQt5标签(label)组件显示一个单行文本或一张图片
- PyQt5组合框 PyQt5组合框(combo box)组件是组合起来的按钮和弹出列表
- PyQt5复选框: PyQt5复选框( check box)组件是一个可以勾选和取消勾选的选项按钮
- PyQt5单行按钮: PyQt5单选(radio)按钮组件是一个可以勾选和取消勾选的选项按钮。在一组单选按钮中,同时仅能勾选其中的一个按钮
- PyQt5消息框: PyQt5消息框(message box)组件显示消息
- PyQt5菜单: PyQt5菜单(menu)组件提供显示的不同选择
- PyQt5表格: PyQt5表格(table)组件提供了应用的标准表格显示功能,可以构造为多行多列
- PyQt5信号/槽: 信号(signal)会让我们对发生的事件进行响应,插槽(slot)仅仅是信号发生时调用的函数
- PyQt5布局: PyQt5布局(layout)包含多个组件
PyQt5中有一些可以使用的类,划分成不同的模块。这些模块如下:
- QtGui:QtGui包含事件处理、图形化、字体、文本和基础图像类
- QtWidgets:QtWidgets包含创建桌面样式用户界面的类
- QtCore:QtCore包含非图形化功能,如时间、目录、文件、流、URL、数据类型、线程和进程
- QtBluetooth:QtBluetooth包含连接设备和与设备交互的类
- QtPositioning:QtPositioning包含定位的类
- QtMultimedia:QtMultimedia包含API和多媒体内容的类
- QtNetwork:QtNetwork包含网络编程的类
- QtWebKit:QtWebKit包含web浏览器实现的类
- QtXml:QtXml包含XML文件的类
- QtSql: QtSql包含针对数据库的类
GUI由事件来驱动。那么什么是事件呢?事件是表示程序中发生某一件事的信号,例如:菜单选择、鼠标移动或按钮点击。事件是由函数处理或在对象上用户执行某些操作时触发的。监听器会监听事件并会在事件发生时触发事件处理器。
使用库来创建基于GUI的应用
下面我们将使用PyQt5库来创建一个简单的GUI应用。这一部分中我们将创建一个简单的窗口。在该窗口中,我们会添加一个按钮和一个标签。在点击按钮后,会在标签中打印一些消息。
首先来看如何创建一个按钮组件。以下代码可创建一个按钮组件:
1 |
b = QPushButton('Click', self) |
下面我们现来看如何创建标签。如下代码可创建一个标签:
1 |
l = QLabel(self) |
下面我将来看如何创建按钮和标签以及如何在点击该按钮后执行操作。创建脚本print_message.py并在其中编写如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
import sys from PyQt5.QtWidgets import QApplication, QLabel, QPushButton, QWidget from PyQt5.QtCore import pyqtSlot from PyQt5.QtGui import QIcon class simple_app(QWidget): def __init__(self): super().__init__() self.title = 'Main app window' self.left = 20 self.top = 20 self.height = 300 self.width = 400 self.app_initialize() def app_initialize(self): self.setWindowTitle(self.title) self.setGeometry(self.left, self.top, self.height, self.width) b = QPushButton('Click', self) b.setToolTip('Click on the button!!') b.move(100, 70) self.l = QLabel(self) self.l.resize(100, 50) self.l.move(100, 200) b.clicked.connect(self.on_click) self.show() @pyqtSlot() def on_click(self): self.l.setText("Hello World") if __name__ == "__main__": app1 = QApplication(sys.argv) ex = simple_app() sys.exit(app1.exec_()) |
运行脚本,得到的输出如下:
1 |
$ python3 print_message.py |
上例中我们导入了需要使用的PyQt5模块。然后创建了应用。QPushButton创建了一个组件,输入的第一个参数的文件会在按钮上显示。然后,我们添加了一个QLabel组件,其中打印一条消息,在点击按钮后会进行打印。接着我们创建了一个函数on_click(),会在点击按钮后执行打印操作。on_click()是我们创建的插槽。
下面我们来看一个盒子布局的示例。创建一个脚本box_layout.py并在其中编写如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout app1 = QApplication([]) make_window = QWidget() layout = QVBoxLayout() layout.addWidget(QPushButton('Button 1')) layout.addWidget(QPushButton('Button 2')) make_window.setLayout(layout) make_window.show() app1.exec() |
运行脚本,我们将得到如下输出:
1 |
$ python3 box_layout.py |
上例中,我们创建了一个盒子布局。其中我们放置了两个按钮。这个脚本仅用于解释例子布局。layout = QVBoxLayout()将创建一个盒子布局。
安装和使用 Apache Log Viewer应用
已经有一个Apache Log Viewer日志查看器应用,可从如下链接下载:https://www.apacheviewer.com/download/
下载之后,在电脑上安装该应用。这一应用可对日志的连接状态,IP 地址等信息进行分析。因此,要分析日志文件,我们只需浏览访问日志文件或错误日志文件。在获取文件之后,我们可以对日志文件进行不同的操作,如添加过滤,过滤出access.log中失败连接或过滤出指定 IP 地址等等.
译者注:Apache Log Viewer原生支持 Windows 下,下述截图均使用 Windows 虚拟机
以下截图显示Apache日志查看器未添加过滤对access.log的查看:
以下截图显示在Apache日志查看器中对access.log文件添加了过滤器:
第一个例子中,我们获取了access log文件并在Apache日志查看器中打开了该文件。我们可以轻易地通过Apache Logs Viewer看出访问日志中打开的各条记录,比如授权与未授权,包含状态、IP 地址、请求等等。但在第二个例子中我们对访问日志文件应用的过滤,这样可以仅查看日志中未授权请求的记录(Alan 此处过滤的为404,未授权过滤出401即可),如上图所示。
总结
本章中我们学习了GUI相关知识。我们学习了GUI中使用的组件。还学习了Python中的PyQt5模块。使用PyQt5模块,我们创建了一个简单的应用来在点击按钮后打印消息。
下一章中,我们将学习如何处理Apache日志文件。
课后问题
- 什么是GUI ?
- Python中的构造函数和析构函数是什么?
- self的用处是什么?
- 对比Tkinter, PyQt和wxPython
- 创建一个Python程序将一个文件中的内容拷贝到另一个文件中
- 创建一个Python程序读取文本文件,计算指定字母在文件中出现的次数
扩展阅读
- Tkinter GUI库文档: https://docs.python.org/3/library/tk.html
- PyQt GUI库文档: https://wiki.python.org/moin/PyQt