在本章中,您将学习图形用户界面(GUI的开发。您可以使用各种 Python 库来创建 GUI。我们将学习用于 GUI 创建的 PyQt5 Python 库。
在本章中,您将学习以下主题:
- GUI 简介
- 使用库创建基于 GUI 的应用程序
- 安装和使用 Apache 日志查看器应用程序
在本节中,我们将学习 GUI。Python 有各种 GUI 框架。在本节中,我们将了解 PyQt5。PyQt5 有不同的图形组件,也称为对象小部件,可以在屏幕上显示,也可以与用户交互。此处列出了组件:
- PyQt5 窗口:PyQt5 窗口将创建一个简单的应用程序窗口。
- PyQt5 按钮:PyQt5 按钮是一个按钮,每当点击它时都会引起一个动作。
- PyQt5 文本框:PyQt5 文本框小部件允许用户输入文本。
- PyQt5 标签:PyQt5 标签小部件显示单行文本或图像。
- PyQt5 组合框:PyQt5 组合框小部件是一个组合按钮和一个弹出列表。
- PyQt5 复选框:PyQt5 复选框小部件是一个选项按钮,可以选中和取消选中。
- PyQt5 单选按钮:PyQt5 单选按钮小部件是一个选项按钮,可以选中或取消选中。在一组单选按钮中,一次只能检查其中一个按钮。
- PyQt5 消息框:PyQt5 消息框小部件显示一条消息。
- PyQt5 菜单:PyQt5 菜单小部件提供不同的显示选项。
- PyQt5 表格:PyQt5 表格小部件为应用程序提供标准的表格显示功能,可以用许多行和列来构造。
- PyQt5 信号/插槽:信号将让您对已发生的事件做出反应,插槽只是一个函数,每当信号发生时就会被调用。
- PyQt5 布局:PyQt5 布局由多个小部件组成。
有几个 PyQt5 类可用,它们被分为不同的模块。以下列出了这些模块:
QtGui:QtGui包含事件处理、图形、字体、文本和基本图像的类。QtWidgets:QtWidgets包含创建桌面风格用户界面的类。QtCore:QtCore包含核心非 GUI 功能,如时间、目录、文件、流、URL、数据类型、线程和进程。QtBluetooth:QtBluetooth包含用于连接设备和与设备交互的类。QtPositioning:QtPositioning包含用于确定位置的类。QtMultimedia:QtMultimedia包含 API 类和多媒体内容类。QtNetwork:QtNetwork包含网络编程类。QtWebKit:QtWebkit包含用于 web 浏览器实现的类。QtXml:QtXml包含 XML 文件的类。QtSql:QtSql包含数据库类。
GUI 由事件驱动。现在,什么是活动?事件是一种信号,指示程序中发生了某些事情,例如,菜单选择、鼠标移动或按钮单击。这些事件由函数处理,并在用户对对象执行某些操作时触发。侦听器将侦听事件,然后在事件发生时调用事件处理程序。
现在,我们将实际使用 PyQt5 库来创建一个简单的 GUI 应用程序。在本节中,我们将创建一个简单的窗口。在该窗口中,我们将有一个按钮和一个标签。单击该按钮后,标签中将打印一些消息。
首先,我们将了解如何创建按钮小部件。以下行将创建一个按钮小部件:
b = QPushButton('Click', self)现在,我们将了解如何创建标签。以下行将创建一个标签:
l = QLabel(self)现在,我们将看到如何创建按钮和标签,以及如何在单击该按钮后执行操作。为此,创建一个print_message.py脚本并在其中编写以下代码:
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__':
appl = QApplication(sys.argv) ex = simple_app() sys.exit(appl.exec_())运行脚本,您将获得如下输出:
student@ubuntu:~/gui_example$ python3 print_message.py在前面的示例中,我们导入了必要的 PyQt5 模块。然后,我们创建了应用程序。QPushButton创建小部件,我们输入的第一个参数是一个文本,将打印在按钮上。接下来,我们有一个QLabel小部件,我们正在上面打印一条消息,当我们点击按钮时,它将被打印出来。接下来,我们创建了一个on_click()函数,点击按钮后执行打印操作。on_click()是我们创建的插槽。
现在,我们将看到一个长方体布局的示例。为此,创建一个box_layout.py脚本并在其中编写以下代码:
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout appl = QApplication([]) make_window = QWidget() layout = QVBoxLayout() layout.addWidget(QPushButton('Button 1')) layout.addWidget(QPushButton('Button 2')) make_window.setLayout(l) make_window.show() appl.exec_()运行脚本,您将获得以下输出:
student@ubuntu:~/gui_example$ python3 box_layout.py在前面的示例中,我们创建了一个长方体布局。其中我们放置了两个按钮。此脚本仅用于解释长方体布局。l = QVBoxLayout()将创建一个方框布局。
由于我们已经有了 Apache 日志查看器应用程序,请从以下链接下载 Apache 日志查看器应用程序:https://www.apacheviewer.com/download/ 。
下载后,在您的计算机上安装应用程序。此应用程序用于根据日志文件的连接状态、IP 地址等分析日志文件。因此,要分析日志文件,我们只需浏览访问日志文件或错误日志文件。获取文件后,我们对日志文件应用不同的操作,例如应用过滤器,例如对access.log中仅有的连接不成功的文件进行排序,或按特定 IP 地址进行过滤。
以下屏幕截图显示了 Apache 日志查看器,其中包含access.log文件,但未应用过滤器:
下面的屏幕截图显示了应用过滤器后 Apache 日志查看器的access.log file:
在第一种情况下,我们获取访问日志文件并在 Apache 日志查看器中打开它。我们可以很容易地看到,我们在 Apache 日志查看器中打开的 access 文件包含各种条目,例如已授权和未授权,以及它们的状态、IP 地址、请求等。但是,在第二种情况下,我们对访问日志文件应用了一个过滤器,这样我们只能看到未经授权请求的日志条目,如屏幕截图所示。
在本节中,我们学习了 GUI。我们了解了 GUI 中使用的组件。我们学习了 Python 中的 PyQt5 模块。使用 PyQt5 模块,我们创建了一个简单的应用程序,在单击按钮后将在标签中打印消息。
在下一章中,您将学习如何使用 Apache 日志文件。
- 什么是 GUI?
- Python 中的构造函数和析构函数是什么?
self有什么用?- 比较 Tkinter、PyQt 和 wxPython。
- 创建一个 Python 程序,将一个文件的内容复制到另一个文件中
- 创建一个 Python 程序,读取文本文件并计算某个字母在文本文件中出现的次数。
- 用于 GUI 文档的 Tkinter 库:https://docs.python.org/3/library/tk.html
- 用于 GUI 文档的 PyQt 库:https://wiki.python.org/moin/PyQt



