PyQt5 2018最新教程

本教程将会教你如何使用PyQt5来制作一个Python桌面应用desktop app。本教程涵括所有内容 - 从配置PyQt的最好方法到编译你的应用并且发布应用供他人使用。你可以使用Windows、Mac或者Linux系统。前提是你需要先安装了Python3.5+ 版本。

PyQt5是什么呢?

PyQt是一个Python的第三方库,它能够让你使用QT图形用户界面框架Qt GUI framework。Qt本身是使用C++编程语言编写的。在Python中使用它,可以让你更快的构建一个应用,并且不会影响C++的速度。

PyQt5是指最新的Qt的第5个版本。你可能依然时常能看到关于(Py)Qt4的信息,不过这个版本已经很老了,并且已经不被官方支持了。

PyQt其中一个有趣的新竞争对手是Qt for Python。它们的API基本是相同的。和PyQt不同的是,它使用的是LGPLGNU宽通用公共许可证,也就是说可以在商业项目中免费使用。它是由Qt公司支持的,所以很可能它就是未来。我们在本教程使用PyQt是因为它更为成熟。因为这些API是基本相同的,之后你可以很轻松的转移到Qt for Python。

安装 PyQt

在Python中管理依赖项dependencies最好的方法就是通过虚拟环境virtual environment。虚拟环境其实就是一个本地的文件夹,里面包括一个特定项目所需要的库libraries。虚拟环境的库和系统全局安装的库相比,全局的库会影响你其他所有项目。

要在当前文件夹生成一个虚拟环境,执行以下命令:

python3-mvenv venv

这条命令会创建一个venv文件夹。要在Windows系统激活这个虚拟环境,运行以下命令:

call venv/scripts/activate.bat

在Mac或者Linux系统,使用以下命令:

sourcevenv/bin/activate

当你看到命令行中有个(venv)前缀时就是成功的激活这个虚拟环境了:

现在我们要安装PyQt,执行以下命令:

pip installPyQt5==5.9.2

我们使用5.9.2版本的原因是因为不是所有的(Py)Qt发行版都是稳定的。而这个版本能保证没问题。除了这个细微差别 - 恭喜你!你已经成功的安装好PyQt5了。

创建一个图形用户界面

现在就开始创建我们的一个图形用户界面应用吧!趁着虚拟环境还处于激活状态,启动Python。我们将执行以下命令:

首先,我们告诉Python通过语句加载PyQt库:

fromPyQt5.QtWidgetsimportQApplication,QLabel

# 下一步,我们实例化一个QApplication

app=QApplication([])

这是一个Qt的要求:每一个图形用户界面应用必须要有一个具体的实例instance。只有你执行了以上那一行代码,Qt大部分组件才会起作用。因此,你写的每一个(Py)Qt应用都需要包括它。

上面那行代码中的中括号brackets[ ]代表给应用传递了命令行参数。因为我们的应用并没有使用任何参数,所以中括号留空。

Talk is cheap, show me the code,让我们来创建一个简单的标签label:

label=QLabel('Hello World!')

然后,我们告诉Qt在屏幕上显示这个标签:

label.show()

这取决于你的操作系统,一个小小的窗口已经出现在你眼前:

最后一步就是将这个组件传递给Qt,并让它“一直运行这个应用,除非用户手动关闭它”。这个是通过以下命令实现:

app.exec_()

如果以上都如预期的一样,那么恭喜你!你刚刚成功的使用Python和Qt构建了你的第一个图形用户界面应用!

部件

你在一个(Py)Qt 应用看到的所有东西都是一个部件widget:按钮、标签、窗口、对话框、进度条Buttons, labels, windows, dialogs, progress bars等等。就像HTML元素一样,部件也是经常内嵌的。例如,一个窗口可以包括按钮,相应的,这个按钮也能包括一个标签。

以下截图展示了一些Qt最常用的部件:

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

QLabel

QComboBox

QCheckBox

QRadioButton

QPushButton

QTableWidget

QLineEdit

QSlider

QProgressBar

布局

像上面那个例子一样,你的图形用户界面应用可能会由多个不同的部件组成。这种情况下,你需要告诉Qt如何去排序这些部件。比如,你可以使用QTableWidget垂直的摆放你的部件:

实现以这个截图的代码为:

fromPyQt5.QtWidgetsimportQApplication,QWidget,QPushButton,QVBoxLayout

app=QApplication([])

window=QWidget()

layout=QVBoxLayout()

layout.addWidget(QPushButton('Top'))

layout.addWidget(QPushButton('Bottom'))

window.setLayout(layout)

window.show()

app.exec_()

像之前一样,我们先实例化了一个。然后,我们创建了一个窗口window。我们使用了最基本的因为它仅仅是作为一个容器container,而且我们也不想让它包含任何特殊的行为。接下来,我们创建一个布局layout并且给它添加两个。最后,我们告诉窗口window去使用这个布局layout(因此也包括它的内容)。像我们的第一个应用一样,我们需要在结尾调用和方法。

当然了,Qt中还有很多其他的布局类型(例如使用QHBoxLayout将内容摆放在一行row中)。查看官方Qt's documentation了解更多内容。

自定义样式

Qt其中的一个特色就是支持自定义样式custom styles。在Qt有很多种方法可以让你自定义应用的外观和感觉look and feel,这个部分总结了一些。

内置样式

修改应用外观最简单粗暴的方法就是直接设置全局样式。来看看之前的那张截图:

这个使用了名为的样式。如果你使用样式,你会看到以下这个样子:

要应用一个样式,你需要使用:

fromPyQt5.QtWidgetsimport*

app=QApplication([])

app.setStyle('Fusion')

...

有多少可用的样式,这取决以你的操作系统。不过一般Windows操作系统才有、、以及Mac操作系统才有。

自定义颜色

如果你喜欢一个样式,但是想要修改它的颜色(例如修改成黑色主题),那么你可以使用QPalette和,例如:

fromPyQt5.QtCoreimportQt

fromPyQt5.QtGuiimportQPalette

fromPyQt5.QtWidgetsimportQApplication,QPushButton

app=QApplication([])

app.setStyle('Fusion')

palette=QPalette()

palette.setColor(QPalette.ButtonText,Qt.red)

app.setPalette(palette)

button=QPushButton('Hello World')

button.show()

app.exec_()

它会将按钮中的文字颜色改成红色:

要修改成黑色的样式,代码如下:

fromPyQt5.QtCoreimportQt

fromPyQt5.QtGuiimportQPalette,QColor

fromPyQt5.QtWidgetsimportQApplication,QPushButton

app=QApplication([])

app.setStyle('Fusion')

palette=QPalette()

palette.setColor(QPalette.ButtonText,Qt.red)

app.setPalette(palette)

button=QPushButton('Hello World')

app.setStyle("Fusion")

dark_palette=QPalette()

dark_palette.setColor(QPalette.Window,QColor(53,53,53))

dark_palette.setColor(QPalette.WindowText,Qt.white)

dark_palette.setColor(QPalette.Base,QColor(25,25,25))

dark_palette.setColor(QPalette.AlternateBase,QColor(53,53,53))

dark_palette.setColor(QPalette.ToolTipBase,Qt.white)

dark_palette.setColor(QPalette.ToolTipText,Qt.white)

dark_palette.setColor(QPalette.Text,Qt.white)

dark_palette.setColor(QPalette.Button,QColor(53,53,53))

dark_palette.setColor(QPalette.ButtonText,Qt.white)

dark_palette.setColor(QPalette.BrightText,Qt.red)

dark_palette.setColor(QPalette.Link,QColor(42,130,218))

dark_palette.setColor(QPalette.Highlight,QColor(42,130,218))

dark_palette.setColor(QPalette.HighlightedText,Qt.black)

app.setPalette(dark_palette)

app.setStyleSheet("QToolTip { color: #ffffff; background-color: #2a82da; border: 1px solid white; }")

button.show()

app.exec_()

运行后,你将看到以下内容:

注意,这个黑色的主题的代码原本是放在作者的github上面的https://gist.github.com/mstuttgart/37c0e6d8f67a0611674e08294f3daef7。译者将其复制出来,并运行后生成截图。所以你们看到的这个窗口样式和之前的不一样是因为译者用的是windows10系统,与作者用的Mac不同。(相比Mac和Linux,windows10确实没那么好看)

样式表

除了以上那个方法,你还可以通过样式表style sheets来修改应用的外观。这与CSS差不多。我们可以在以下例子中使用它来添加一些间距spacing。

fromPyQt5.QtWidgetsimportQApplication,QPushButton

app=QApplication([])

app.setStyleSheet("QPushButton { margin: 10ex; }")

button=QPushButton('Hello World')

button.show()

app.exec_()

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181001G1ANCW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券