PyQt5-简明中文教程

网友投稿 1195 2022-10-13

PyQt5-简明中文教程

PyQt5-简明中文教程

最近在国外网站上看到一篇介绍 PyQt5 的技术文章,看完觉得不错,翻译成中文分享给大家~

这篇 ​​PyQt5​​​ 教程展示了如何使用​​Python 3​​​ 和 ​​Qt​​​ 在​​Windows​​​ ,​​Mac​​​ 或 ​​Linux​​​ 上创建 ​​GUI​​ 。 涵盖了为应用创建安装程序。

目录

什么是PyQt5?

​​PyQt​​​ 是一个允许使用 ​​Python​​​ 的 ​​Qt GUI​​​ 框架的库。 ​​Qt​​​ 本身是用 ​​C ++​​​ 编写的。 通过在 ​​Python​​​ 中使用它,我们可以更快地构建应用程序,同时不会牺牲 ​​C ++​​ 的大部分速度。

​​PyQt5​​​ 是指 ​​Qt​​​ 的最新版本5。 你可能仍会在网上偶尔提到​​(Py)Qt4​​ ,但它已经过时且不再受支持。

​​PyQt​​​ 的一个有趣的新竞争对手是 ​​Qt for Python​​​ 。 它的 ​​API​​​ 实际上是相同的。 与 ​​PyQt​​​ 不同,它是根据 ​​LGPL​​​许可的,因此可以在商业项目中免费使用。 它得到 ​​Qt​​​ 公司的支持,因而可能是未来的使用的趋势。 我们在这里使用​​PyQt​​​ 的原因是因为它更成熟。 由于 ​​API​​​ 非常相似,我们可以稍后将应用程序轻松切换到 ​​Qt for Python​​ 。

安装PyQt

在 ​​Python​​ 中管理依赖项的最佳方法是通过虚拟环境。 虚拟环境只是一个包含特定项目库的本地目录。 这与这些库的系统范围安装不同,这将影响您的所有其他项目。

要在当前目录中创建虚拟环境,请执行以下命令:

​​python3 -m venv venv​​​这会创建 ​​venv /​​​ 文件夹。 要在 ​​Windows​​ 上激活虚拟环境,请运行:

调用 ​​venv / scripts / activate.bat​​​在 ​​Mac​​​ 和 ​​Linux​​ 上,使用:

​​source venv / bin / activate​​​可以通过 ​​shell​​​ 中的​​(venv)​​前缀看到虚拟环境处于活动状态:

要立即安装 ​​PyQt​​ ,请输入以下命令:

​​pip install PyQt5==5.9.2​​

我们使用版本5.9.2的原因是并非所有 ​​(Py)Qt​​​版本都同样稳定。 这个版本保证有效。如果没什么意外的话- 祝贺你! 你已经成功安装了 ​​PyQt5​​。

创建一个GUI

是时候编写我们的第一个 ​​GUI​​​应用了! 在虚拟环境仍处于活动状态时,启动 ​​Python​​。 我们将执行以下命令:

首先,我们输入命令 让 ​​Python​​​ 加载 ​​PyQt​​

​​from PyQt5.QtWidgets import QApplication, QLabel​​

之后,我们创建一个 ​​QApplication​​

​​app = QApplication([])​​

这是 ​​Qt​​​ 的一贯要求:每个 ​​GUI​​​ 应用程序必须只有一个 ​​QApplication​​​ 实例。 在执行上述行之前,​​Qt​​​ 的许多部分都不起作用。 因此,以后在几乎所有 ​​(Py)Qt​​ 应用程序中都需要它。

上面一行中的方括号​​[]​​表示传递给应用程序的命令行参数。 因为我们的应用程序不使用任何参数,所以我们将括号留空。

现在,为了实际看到一些东西,我们创建一个简单的 ​​label​​:

​​label = QLabel('Hello World!')​​​然后,我们告诉 ​​Qt​​​ 在屏幕上显示 ​​label​​:

​​label.show()​​

请注意观察您的操作系统,这已经打开了一个小小的窗口:

最后一步是将控制权交给​​Qt​​并要求它“运行应用程序,直到用户关闭它”。 通过以下命令完成的:

​​app.exec_()​​

如果以上所有这些步骤按预期工作,那么恭喜你! 你刚刚使用 ​​Python​​​ 和 ​​Qt​​​ 构建了第一个 ​​GUI​​ 应用程序。

窗口部件

我们在 ​​(Py)Qt​​ 应用程序中看到的所有内容都是一个小部件:按钮,标签,窗口,对话框,进度条等。

与 ​​HTML​​元素一样,小部件通常是嵌套的。 例如,窗口可以包含一个按钮,该按钮又包含一个标签。

以下屏幕截图显示了最常见的 ​​Qt​​ 小部件:

从上到下,从左到右,它们分别是:

QLabelQComboBoxQCheckBoxQRadioButtonQPushButtonQTableWidgetQLineEditQSliderQProgressBar

如果您有兴趣,可以-截图 here 中显示的应用程序代码

布局

与上面的示例一样,我们的 ​​GUI​​​ 很可能包含多个小部件。 在这种情况下,我们需要告诉 ​​Qt​​​ 如何定位它们。 例如,我们可以使用 ​​QVBoxLayout​​ 垂直堆叠小部件:

上面的代码可以如下编写:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayoutapp = QApplication([])window = QWidget()layout = QVBoxLayout()layout.addWidget(QPushButton('Top'))layout.addWidget(QPushButton('Bottom'))window.setLayout(layout)window.show()app.exec_()

和以前一样,我们实例化了一个 ​​QApplication​​​。 然后,我们创建一个窗口。 我们使用最基本的类型​​QWidget​​​,因为它只是作为一个容器,我们不希望它有任何特殊的行为。 接下来,我们创建布局并向其添加两个​​QPushButtons​​​。 最后,我们告诉窗口使用这个布局(以及它的内容)。 与我们的第一个应用程序一样,我们最后调用​​window.show()​​​和​​app.exec_()​​。

当然还有许多其他类型的布局(例如,​​QHBoxLayout​​ 可以在一行中布置项目)。

有关概述,请参阅 ​​Qt​​ 官方的文档。

自定义样式

​​Qt​​ 的优势之一是它对定制款式的支持。 有许多机制可以让您自定义应用程序的外观。 本节概述了一些常用的样式说明。

内置样式

更改应用程序外观的最粗暴简单的方法是设置全局样式

回想一下上面的小部件截图:

下面是使用了一种 ​​Fusion​​ 的样式,效果是这样:

要应用一种样式 ,记得调用​​app.setStyle(...)​​ 方法

from PyQt5.QtWidgets import *app = QApplication([])app.setStyle('Fusion')...

可用的样式取决于我们使用的系统环境,但通常是 ​​“Fusion”,“Windows”,“WindowsVista”(仅限Windows)和“Macintosh”​​​(仅限 ​​Mac​​)。

自定义颜色

如果你喜欢一种风格,但想要改变它的颜色(例如,到一个黑暗的主题),那么你可以使用 QPalette 调用​​app.setPalette(...)​​. 举个例子:

from PyQt5.QtCore import Qtfrom PyQt5.QtGui import QPalettefrom PyQt5.QtWidgets import QApplication, QPushButtonapp = QApplication([])app.setStyle('Fusion')palette = QPalette()palette.setColor(QPalette.ButtonText, Qt.red)app.setPalette(palette)button = QPushButton('Hello World')button.show()app.exec_()

将按钮颜色改为红色之后的效果:

Fusion 样式的黑色主题, 参考 here.

样式表

除了上述内容外,这里与 ​​CSS​​ 处理样式类似, 我们还可以通过样式表更改应用程序的外观。

我们可以使用它来添加一些间距:

from PyQt5.QtWidgets import QApplication, QPushButtonapp = QApplication([])app.setStyleSheet("QPushButton { margin: 10ex; }")button = QPushButton('Hello World')button.show()app.exec_()

更多的信息可以参考 Qt's documentation.

信号/插槽

以下示例说明了这一点。 它包含一个按钮,单击该按钮时会显示一个消息框:

from PyQt5.QtWidgets import *app = QApplication([])button = QPushButton('Click')def on_button_clicked(): alert = QMessageBox() alert.setText('You clicked the button!') alert.exec_()button.clicked.connect(on_button_clicked)button.show()app.exec_()

上面突出显示了有趣的一行:​​button.clicked​​​是一个信号,​​connect(...)​​​让我们在上面安装一个所谓的​​slot​​。 这只是一个在信号发生时被调用的函数。 在上面的示例中,我们的插槽显示了一个消息框。

信号在 ​​Qt​​ 中无处不在。 当然,您也可以定义自己喜欢的槽。

编译应用程序

我们现在拥有创建响应用户输入的 ​​GUI​​的基本知识了, 假设我们现在写了一个应用程序,它可以在我们的计算机上运行。 我们如何把它交付给其他人,让别人也可以运行它呢?

你可以要求你的应用程序的用户像我们上面那样安装 ​​Python​​​ 和 ​​PyQt​​ ,然后给他们你的源代码。 但这非常繁琐(而且通常不切实际)。 我们想要的是您的应用程序的独立版本。 也就是说,二进制可执行文件,其他人可以在他们的系统上运行,而无需安装任何东西。

在 ​​Python​​​ 世界中,将源代码转换为自包含可执行文件的过程称为冻结。 虽然有很多库可以解决这个问题 - 例如​​PyInstaller​​​,​​py2exe​​​,​​cx_Freeze​​​,​​bbfreze​​​,​​py2app​​​... - 冻结 ​​PyQt​​应用程序传统上是一个令人惊讶的难题。

我们将使用一个名为 ​​fbs​​​ 的新库,它允许您为 ​​PyQt​​ 应用程序创建独立的可执行文件。 要安装它,请输入命令:

pip install fbs PyInstaller==3.3.1

然后,执行命令

python3 -m fbs startproject

终端如下:

当我们输入 ​​run​​​ 命令之后,一个 ​​Windows​​  应用程序便会启动

这是一个 ​​PyQt5​​​ 应用程序,就像我们之前看到的那样。 它的源代码在当前目录的​​src / main / python / main.py​​​中。 但这里很酷:我们可以使用 ​​fbs​​ 将其转换为独立的可执行文件!

python3 -m fbs freeze

这会将一个自包含的二进制文件放在当前目录的​​target / MyApp /​​文件夹中。 您可以将它发送给您的朋友(使用与您相同的操作系统),他们将能够运行您的应用程序!

Tips请注意,fbs 目前针对 Python 3.5 版本。 如果有不同的版本可能导致以上操作无效, 请安装 install Python 3.5  Mac OS 系统 可以安装 install Python 3.5 with Homebrew.

奖励:创建安装程序

​​fbs​​​ 还允许通过命令为应用程序创建安装程序 ​​python3 -m fbs installer​​:

Tips如果是在 ​​Windows​​​  环境,还需要安装 NSIS  之后添加到系统环境路径 ​​PATH​​有关如何在现有应用程序中使用fbs的更多信息,请参阅 this article. Or fbs's tutorial.

总结

如果你已经做到这一步了,那么祝贺你!

到现在,我们可以说很好地了解 ​​PyQt​​​(及其各个部分)的用法,以及如何使用​​Python​​​ 编写桌面应用程序。 我们还了解了 ​​fbs​​ 如何创建独立的可执行文件和安装程序。

如果您对本教程有任何疑问或反馈,请随时给我发电子邮件。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:ARTS-for-week3-20181102
下一篇:ZOJ 3875 Lunch Time (The 12th Zhejiang Provincial Collegiate Programming Contest )
相关文章

 发表评论

暂时没有评论,来抢沙发吧~