PyQt5教程:使用Qt Designer拖放界面创建GUI应用程序与菜单
这篇 pyqt5 教程会向您展示怎样通过 QtDesigner 在拖放界面当中创建 GUI 应用程序以及菜单。利用 Qt 设计师也就是 Qt Designer 来设计界面,能够借助 pyuic5 将.ui 文件编译为.py 文件,将其导入到代码里就可以使用了。

什么是Qt Designer?
这使得创建 GUI 变得很容易,尤其是对于简单的 GUI 来说。
安装Qt Designer
Qt Designer自带 pip 包 pyqt5-tools。所以,如果您之前的教程中安装了它,那么事情就会变得更简便。
否则,请在终端运行以下命令。
在当前路径下,即[linuxidc@linux:~/www.linuxidc.com],执行命令 pip install pyqt5-tools 来安装 pyqt5-tools 库。
如果上面的命令不起作用,您可以尝试如下命令:
在 linuxidc 用户的当前目录下,即 /home/linuxidc/www.linuxidc.com ,执行命令 pip3 来安装 pyqt5-tools 。
运行Qt Designer
现在我们已经将 QtDesigner 安装好了,接下来查看一下 Qt Designer 的安装位置。
在[linuxidc@linux:~/www.linuxidc.com]路径下执行了“whereis designer”这个命令。
设计师:位于/home/linuxidc/anaconda3/bin/ 路径下的 designer
安装完成后,designer 能够在 /home/linuxidc/anaconda3/bin/designer 这个位置被找到。启动 designer 可以通过以下方式:
在[linuxidc@linux:~/www.linuxidc.com]这个环境下执行了 designer 操作。
或者
在 /home/linuxidc/www.linuxidc.com 目录下,执行了 /home/linuxidc/anaconda3/bin/designer 命令。
[id_1367393344]
[id_197800025]
创建了 GUI 并且将其导出到 Python 代码之后,您得进行如下步骤。
将工作保存在能够找到它的地方,您会发现它被另存为.ui 文件。
2.在该位置打开一个命令提示符窗口。
3.运行以下命令:
在 linuxidc 用户的主目录下的 /www.linuxidc.com 路径中,执行了 pyuic5 命令,将 linuxidc.ui 文件转换为 linuxidc.py 文件。
现在,您应当在和.ui 文件处于相同的目录里看到一个名为“linuxidc.py”的文件。您能够打开它,并且可以看到它包含着用于创建通过拖放来创建的图形用户界面(GUI)的代码。
创建菜单
接下来我们将向您展示创建菜单的方法,展示如何把菜单按钮链接到功能或方法,还将展示在鼠标悬停在项目上时,怎样在状态栏中显示文本。
创建GUI
我们会运用 Qt Designer 来为这个教程构建 GUI。我已经对 gui 进行了如下的设置:
-要添加菜单按钮,只需如下所示双击在在此输入即可。
要将快捷方式添加到菜单按钮,需在属性编辑器里去查找快捷方式,接着再单击键盘快捷方式。
你可以添加一个状态提示。当鼠标悬停在按钮上时,该提示会显示在窗口的底部栏里。
您若想紧跟本教程,我建议您添加一些菜单按钮,并且至少添加一个标签。
导出GUI
我们像之前那样,把 GUI 保存为.ui 文件,接着将其导出到 python 代码。
[linuxidc@linux:~/www.linuxidc.com]$ pyuic5 linuxidc.ui –olinuxidc.py
将菜单按钮链接到方法
打开 python 代码并导出 gui 后,开始将菜单按钮链接到方法。在本教程中,要做的是让每次按下菜单栏按钮时,屏幕上的标签都发生变化。
第一步是去编写一个新的单击方法。然而,这个名称将会接受一个参数。
def clicked(self, text):
self.label.setText(text)
self.label.adjustSize()
当我们导出GUI时,它将进入pyqt创建的类中。
要让每个菜单按钮都链接到这个方法,我们需要在 setupUI 方法里面添加以下这些行。
self.actionNew 的触发被连接了。lambda: self.clicked("点击了新建"))
self.actionSave 触发后会导致与之相连的动作。lambda: self.clicked("点击了保存"))
self.actionCopy 的触发连接到了lambda: self.clicked("点击了复制"))
当 self.actionPaste 被触发时,会触发与之相关的连接。lambda: self.clicked("点击了粘贴"))
现在,我们的菜单按钮已链接!
完整代码
# -*- coding: utf-8 -*-
从读取的 UI 文件中生成了表单实现。'test.ui'
#
5.11.3
#
# WARNING! All changes made in this file will be lost!
引入 PyQt5 模块,其中包含 QtCore、Gui 和 QtWidgets 等部分。
[id_1212385831] Ui_MainWindow(object):
以下是改写后的内容:在 MainWindow 上进行设置 UI 的操作。
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
MainWindow 拥有一个名为 self.centralwidget 的 QtWidgets.QWidget 部件。
self.centralwidget 的对象名被设置为"centralwidget")
self.label 等于 QtWidgets.QLabel(self.centralwidget)
self.label 的几何形状被设置为 QtCore.QRect(240, 50, 321, 121))
font = QtGui.QFont()
font.setPointSize(36)
self.label.setFont(font)
self.label.setObjectName("label")
MainWindow 将中央窗口部件设置为 self.centralwidget 。
MainWindow 拥有一个名为 self.menubar 的 QtWidgets.QMenuBar 对象。
self.menubar 的几何形状被设置为 QtCore.QRect(0, 0, 800, 26))
self.menubar.setObjectName("menubar")
self.menuFile 是由 QtWidgets.QMenu 创建的,并位于 self.menubar 中。
self.menuFile.setObjectName("menuFile")
self.menuEdit 是一个由 QtWidgets.QMenu 创建的菜单,它是 self.menubar 的子菜单。
self.menuEdit.setObjectName("menuEdit")
MainWindow 将菜单栏设置为 self.menubar 。
MainWindow 有一个状态栏,它是由 QtWidgets.QStatusBar 创建的,这个状态栏被赋值给了 self.statusbar 。
self.statusbar.setObjectName("statusbar")
MainWindow 将自身的状态栏设置为 self.statusbar 。
self.actionCopy 是一个 QtWidgets.QAction 对象,它属于 MainWindow 。
self.actionCopy 的对象名被设置为(此处未给出具体对象名)。"actionCopy")
self.actionPaste 是一个 QtWidgets.QAction 对象,它属于 MainWindow 。
self.actionPaste 的对象名被设置为"actionPaste")
self.actionSave 是一个 QtWidgets.QAction 对象,它属于 MainWindow 。
self.actionSave 的对象名被设置为"actionSave")
self.actionNew 是一个 QtWidgets.QAction 对象,它属于 MainWindow 。
self.actionNew.setObjectName("actionNew")
self.menuFile 执行了添加动作的操作,添加的动作是 self.actionNew 。
self 的 menuFile 执行了添加动作的操作,添加的动作是 self 的 actionSave 。
self.menuEdit 执行了添加动作的操作,添加的动作是 self.actionCopy
self.menuEdit 执行了添加动作的操作,添加的动作是 self.actionPaste 。
self.menubar 执行了添加动作的操作,这个动作是 self.menuFile 的菜单动作(self.menuFile.menuAction())。
self.menubar 执行了添加动作的操作,添加的动作是 self.menuEdit 的菜单动作。
调用 self 的 retranslateUi 方法并传入 MainWindow 对象
QtCore 的 QMetaObject 与 MainWindow 进行通过名称连接槽的操作。
self.actionNew 的触发连接到了一个 lambda 函数,这个 lambda 函数会调用 self.clicked 方法。"点击了新建"))
self.actionSave 的触发会连接到一个 lambda 函数,这个 lambda 函数会调用 self.clicked 方法。"点击了保存"))
self.actionCopy 的触发与 self.clicked 相关联,当 self.actionCopy 被触发时,就会调用 self.clicked 函数。"点击了复制"))
self.actionPaste 的触发信号连接到了这样一个 lambda 函数:它会调用 self.clicked 函数。"点击了粘贴"))
在 MainWindow 上进行重新翻译界面的操作。
QtCore.QCoreApplication.translate 被赋值给了变量 _translate 。
MainWindow 设定窗口标题(通过翻译函数 _translate 进行翻译)。"MainWindow", "Linux公社 www.linuxidc.com"))
self.label 把文本设置为 _translate 翻译后的内容。"MainWindow", "Linux公社 www.linuxidc.com"))
self.label.adjustSize();
self.label.move(80, 180)
self.menuFile 的标题被设置为翻译后的内容。"MainWindow", "���件"))
self.menuEdit 的标题设置为翻译后的内容。"MainWindow", "编辑"))
self.actionCopy 的文本设置为 _translate("MainWindow", "复制"))
self.actionCopy 被设置了快捷键,这个快捷键是通过 _translate 函数翻译得到的。"MainWindow", "Ctrl+C"))
self.actionPaste 设定文本为 _translate("MainWindow", "粘贴"))
self.actionPaste 被设置了快捷键,这个快捷键是通过翻译得到的(_translate( )。"MainWindow", "Ctrl+V"))
self.actionSave 这个控件设置其文本内容为通过 _translate 函数翻译后的内容。"MainWindow", "保存"))
self.actionSave 被设置了快捷键(通过翻译得到)_translate( 。"MainWindow", "Ctrl+S"))
self.actionNew 这个组件设置文本内容为通过翻译函数 _translate 翻译后的文本。"MainWindow", "新建"))
self.actionNew 被设置了快捷键,这个快捷键是通过 _translate 函数翻译得到的。"MainWindow", "Ctrl+N"))
def clicked(self, text):
self.label.setText(text)
self.label.adjustSize()
if __name__ == "__main__":
import sys
创建一个名为 app 的对象,该对象是 QtWidgets.QApplication 类的实例,通过传递 sys.argv 作为参数来初始化它。
MainWindow 是一个 QtWidgets.QMainWindow 的实例。
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
如下图:
在下一个教程中,我们将讨论像素图控件QPixmap。
使用 PyQt5 来创建 Python GUI 应用程序,同时利用 Qt Designer 进行相关设计。
更多Python相关信息见Python 专题页面
Linux公社的RSS地址:
本文永久更新链接地址: