2025年3月28日 星期五 甲辰(龙)年 月廿七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

如何用 PyQt5 快速构建一个简单的 GUI 应用

时间:10-12来源:作者:点击数:34
城东书院 www.cdsy.xyz

1. 介绍

Python GUI 常用的 3 种框架是:Tkinter、wxpython、PyQt5

PyQt5 基于 Qt,是 Python 和 Qt 的结合体,可以用 Python 语言编写跨平台的 GUI 应用程序

相比 Tkiner和 wxpython,PyQt5 利用自带的Qt Designer可视化工具进行界面设计,可以非常快速地开发出一款功能强大、界面美观的 GUI 应用程序

2. 安装

以 Mac OSX 为例,PC 下的操作类似。

首先,在系统内部安装qt应用

  • # 安装qt
  • brew install qt

然后,在 Python 虚拟环境下安装sip和pyqt5两个依赖库

  • # 安装依赖sip
  • pip3 install sip
  • # 安装依赖pyqt5
  • pip3 install pyqt5

接着,在 Pycharm 中配置ExternalTools,新建Qt Designer和PyUIC两个命令

  • # Qt Designer 配置
  • Program:/usr/local/Cellar/qt/5.14.1/libexec/Designer.app
  • Working directory:/usr/local/Cellar/qt/5.14.1/libexec
  • # PyUIC
  • # Python环境路径
  • Program:/usr/local/bin/python3.7
  • # 参数
  • Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py 
  • # 路径【固定】
  • Working directory:$ProjectFileDir$

其中,在第一步安装Qt 应用文件夹下,找到Designer.app和libexec两个文件,配置进去

图片

由于 QtDesigner 生成的文件是*.ui 文件,需要借助 pyqt5 中的pyuic,将 ui 文件转换为 Python文件

图片

最后,可以直接在 Pycharm 中快速打开 Designer 界面、ui 转 py 文件这两个操作。

图片

3. 常用功能介绍

QtDesigner 是一个非常强大的 GUI 设计工具,生成的文件格式为:*.ui

图片

QtDesigner 主要包含下面 6 部分:

  • 主设计界面区
  • 控件区
  • 控件属性区
  • 信号和槽函数区
  • 资源图片区
  • 控件结构树区

其中,

主设计界面区:用于窗口编辑,最终的 GUI 展示区域

控件区:包含文本、输入框、选择器、容器等控件,可以直接拖拉到窗口进行布局

属性区:用于定义控件的属性,包含:内容、字体大小、宽和高等

信号和槽函数区:可以很方便地为一个控件指定一个事件监听,比如:单击、选中事件等

资源图片区域:用于导入本地的资源文件,在控件中使用,比如:图片

控件结构树区:可以很直观地显示控件间的结构关系

4.来个例子

第 1 步,我们从控件区拖 3 个按钮和 2 个输入框到界面设计区域

图片

第 2 步,选中控件,鼠标右键为控件新增属性,比如:控件内容、控件名称(相当于id),对于一些复杂的属性设置,需要在属性区域单独进行设置

编辑完 UI界面之后,会在本地生成一个 *.ui 的文件

图片

第 3 步,选择*.ui文件,在 Pycharm 中使用PyUIC命令,将 ui 文件转换为 py 文件

  • # ui文件转为py文件
  • from PyQt5 import QtCore, QtGui, QtWidgets
  • class Ui_MainWindow(object):
  •     def setupUi(self, MainWindow):
  •         MainWindow.setObjectName("MainWindow")
  •         MainWindow.resize(800790)
  •         self.centralwidget = QtWidgets.QWidget(MainWindow)
  •         self.centralwidget.setObjectName("centralwidget")
  •         self.pushButton = QtWidgets.QPushButton(self.centralwidget)
  •         self.pushButton.setGeometry(QtCore.QRect(1308011141))
  •         self.pushButton.setObjectName("pushButton")
  •         self.username = QtWidgets.QLineEdit(self.centralwidget)
  •         self.username.setGeometry(QtCore.QRect(2608027141))
  •         self.username.setObjectName("username")
  •         self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
  •         self.pushButton_2.setGeometry(QtCore.QRect(13015011141))
  •         self.pushButton_2.setObjectName("pushButton_2")
  •         self.password = QtWidgets.QLineEdit(self.centralwidget)
  •         self.password.setGeometry(QtCore.QRect(26015027141))
  •         self.password.setObjectName("password")
  •         self.login = QtWidgets.QPushButton(self.centralwidget)
  •         self.login.setGeometry(QtCore.QRect(26023014161))
  •         self.login.setObjectName("login")
  •         MainWindow.setCentralWidget(self.centralwidget)
  •         self.statusbar = QtWidgets.QStatusBar(MainWindow)
  •         self.statusbar.setObjectName("statusbar")
  •         MainWindow.setStatusBar(self.statusbar)
  •         self.retranslateUi(MainWindow)
  •         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  •     def retranslateUi(self, MainWindow):
  •         _translate = QtCore.QCoreApplication.translate
  •         MainWindow.setWindowTitle(_translate("MainWindow""MainWindow"))
  •         self.pushButton.setText(_translate("MainWindow""用户名:"))
  •         self.pushButton_2.setText(_translate("MainWindow""密码:"))
  •         self.login.setText(_translate("MainWindow""登录"))

第 4 步,为按钮添加点击事件

使用控件名.信号.connect(槽函数)的形式,为控件添加一个点击事件的监听

  • class Ui_MainWindow(object):
  •     def setupUi(self, MainWindow):
  •         # 为登录按钮指定事件
  •         # clicked:信号,login_met:槽函数
  •         self.login.clicked.connect(self.login_met)
  •         self.retranslateUi(MainWindow)
  •         QtCore.QMetaObject.connectSlotsByName(MainWindow)
  •     def login_met(self):
  •         """
  •         登录事件(槽函数)
  •         :return:
  •         """
  •         # 用户名输入框的内容
  •         username = self.login.text()
  •         # 密码输入框的内容
  •         password = self.password.text()
  •         print("输入的用户名是:", username, "密码是:", password)

第 5 步,展示界面

最后,新建一个 py 文件,实例化一个QApplication对象,将上面创建的 MainWindow 展示出来即可。

  • import sys
  • from PyQt5.QtWidgets import QApplication, QMainWindow
  • # 界面文件
  • from temp import *
  • class CustomUI(QMainWindow, Ui_MainWindow):
  •     def __init__(self, parent=None):
  •         super(CustomUI, self).__init__(parent)
  •         self.setupUi(self)
  • if __name__ == '__main__':
  •     app = QApplication(sys.argv)
  •     cutomUI = CustomUI()
  •     cutomUI.show()
  •     sys.exit(app.exec_())

需要注意的是,这部分内容仅仅是调用显示 GUI 界面的逻辑,实际项目开发过程中很少变动。

图片

5.总结

通过上面的例子发现,使用 PyQt5 构建 GUI 真的很方便,大部分的工作都可以在 QtDesigner 设计完成,然后回归到 Pycharm中,转为 py 文件、编写信号和槽函数,就能快速开发 GUI 图形用户界面。

已经将全部源码上传:链接:https://pan.baidu.com/s/1FYaLMQmftl-paG4xVX3gcQ  密码:9p3w。

城东书院 www.cdsy.xyz
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐