使用PyQt5和Qt Designer创建Python GUI应用程序(三)
2020/05/08 21:13:55 来源:Linux公社 作者:醉落红尘

这篇pyqt5教程将向您展示如何使用QtDesigner在拖放界面内创建GUI应用程序和菜单。使用Qt设计师 - Qt Designer设计界面,可以使用pyuic5 将.ui文件编译成.py文件,import到代码中就可使用。

什么是Qt Designer?

Qt Designer是Qt和PyQt的制造商开发的一个程序,可让您通过拖放来构建GUI应用程序。如果您已经构建并保存了一个应用程序,那么您可以运行命令行工具,它将GUI转换为python代码。这使得创建GUI变得非常容易,尤其是简单的GUI。

安装Qt Designer

Qt Designer附带了pip包pyqt5-tools,因此,如果您在以前的教程中安装了它,那么一切就变得更简单了。

否则,请在终端运行以下命令。

[linuxidc@linux:~/www.linuxidc.com]$ pip install pyqt5-tools

如果上面的命令不起作用,您可以尝试如下命令:

[linuxidc@linux:~/www.linuxidc.com]$ pip3 install pyqt5-tools

运行Qt Designer

现在我们已经安装了QtDesigner,查看下Qt Designer的安装位置。

[linuxidc@linux:~/www.linuxidc.com]$ whereis designer
designer: /home/linuxidc/anaconda3/bin/designer

安装完成之后designer 可以在/home/linuxidc/anaconda3/bin/designer中找到,通过如下方式启动designer

[linuxidc@linux:~/www.linuxidc.com]$ designer

或者

[linuxidc@linux:~/www.linuxidc.com]$ /home/linuxidc/anaconda3/bin/designer

此时可以直接通过输入designer启动程序

现在,您可以启动设计器应用程序并开始创建GUI。

使用PyQt5和Qt Designer创建Python GUI应用程序(三)

创建GUI并将其导出到Python代码后,您需要执行以下步骤。

1.将工作保存在可以找到它的地方(您会注意到它另存为.ui文件)。

2.在该位置打开一个命令提示符窗口。

3.运行以下命令:

[linuxidc@linux:~/www.linuxidc.com]$ pyuic5 linuxidc.ui –o linuxidc.py

现在,您应该在与.ui文件相同的目录中看到一个文件“linuxidc.py”。 您可以打开它,并看到它包含用于创建通过拖放创建的GUI的代码。

创建菜单

接下来我们将向您展示如何创建菜单,将菜单按钮链接到功能/方法以及将鼠标悬停在项目上时在状态栏中显示文本。

创建GUI

我们将使用Qt Designer为本教程创建GUI。我已将gui设置如下:

-要添加菜单按钮,只需如下所示双击在在此输入即可。

使用PyQt5和Qt Designer创建Python GUI应用程序(三)

-要将快捷方式添加到菜单按钮,请在属性编辑器中查找快捷方式,然后单击键盘快捷方式。

使用PyQt5和Qt Designer创建Python GUI应用程序(三)

-你也可以添加一个状态提示。当您将鼠标悬停在按钮上时,它将显示在窗口的底部栏中。

如果您想紧跟本教程,我建议您添加一些菜单按钮和至少一个标签。

导出GUI

就像之前一样,我们将GUI保存为.ui文件并将其导出到python代码。

[linuxidc@linux:~/www.linuxidc.com]$ pyuic5 linuxidc.ui –o linuxidc.py

将菜单按钮链接到方法

导出gui并打开python代码,现在开始将菜单按钮链接到方法。在本教程中,我将做的是使它在每次按下菜单栏按钮时屏幕上的标签都发生变化。

第一步是编写一个新的单击方法。但是,这个名称将接受一个参数。

def clicked(self, text):
    self.label.setText(text)
     self.label.adjustSize()

当我们导出GUI时,它将进入pyqt创建的类中。

要将每个菜单按钮链接到此方法,我们将在setupUI方法内添加以下行。

        self.actionNew.triggered.connect(lambda: self.clicked("点击了新建"))
        self.actionSave.triggered.connect(lambda: self.clicked("点击了保存"))
        self.actionCopy.triggered.connect(lambda: self.clicked("点击了复制"))
        self.actionPaste.triggered.connect(lambda: self.clicked("点击了粘贴"))

现在,我们的菜单按钮已链接!

完整代码

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.11.3
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(240, 50, 321, 121))
        font = QtGui.QFont()
        font.setPointSize(36)
        self.label.setFont(font)
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(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.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionCopy = QtWidgets.QAction(MainWindow)
        self.actionCopy.setObjectName("actionCopy")
        self.actionPaste = QtWidgets.QAction(MainWindow)
        self.actionPaste.setObjectName("actionPaste")
        self.actionSave = QtWidgets.QAction(MainWindow)
        self.actionSave.setObjectName("actionSave")
        self.actionNew = QtWidgets.QAction(MainWindow)
        self.actionNew.setObjectName("actionNew")
        self.menuFile.addAction(self.actionNew)
        self.menuFile.addAction(self.actionSave)
        self.menuEdit.addAction(self.actionCopy)
        self.menuEdit.addAction(self.actionPaste)
        self.menubar.addAction(self.menuFile.menuAction())
        self.menubar.addAction(self.menuEdit.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.actionNew.triggered.connect(lambda: self.clicked("点击了新建"))
        self.actionSave.triggered.connect(lambda: self.clicked("点击了保存"))
        self.actionCopy.triggered.connect(lambda: self.clicked("点击了复制"))
        self.actionPaste.triggered.connect(lambda: self.clicked("点击了粘贴"))

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Linux公社 www.linuxidc.com"))
        self.label.setText(_translate("MainWindow", "Linux公社 www.linuxidc.com"))
        self.label.adjustSize();
        self.label.move(80, 180)
        self.menuFile.setTitle(_translate("MainWindow", "文件"))
        self.menuEdit.setTitle(_translate("MainWindow", "编辑"))
        self.actionCopy.setText(_translate("MainWindow", "复制"))
        self.actionCopy.setShortcut(_translate("MainWindow", "Ctrl+C"))
        self.actionPaste.setText(_translate("MainWindow", "粘贴"))
        self.actionPaste.setShortcut(_translate("MainWindow", "Ctrl+V"))
        self.actionSave.setText(_translate("MainWindow", "保存"))
        self.actionSave.setShortcut(_translate("MainWindow", "Ctrl+S"))
        self.actionNew.setText(_translate("MainWindow", "新建"))
        self.actionNew.setShortcut(_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_())

如下图:

使用PyQt5和Qt Designer创建Python GUI应用程序(三)

使用PyQt5和Qt Designer创建Python GUI应用程序(三)

在下一个教程中,我们将讨论像素图控件QPixmap。

使用PyQt5和Qt Designer创建Python GUI应用程序https://www.linuxidc.com/search.aspx?where=nkey&keyword=65658

更多Python相关信息见Python 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2020-05/163141.htm


6

本栏最新