点击上方“Python全家桶”,“星标”或"置顶"

关键时刻,第一时间送达

本文已获授权,欢迎分享转发

1. 介绍

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

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

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

2. 安装

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

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

# 安装qtbrew install qt

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

# 安装依赖sippip3 install sip

# 安装依赖pyqt5pip3 install pyqt5

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

# Qt Designer 配置Program:/usr/local/Cellar/qt/5.14.1/libexec/Designer.appWorking 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(800, 790)        self.centralwidget = QtWidgets.QWidget(MainWindow)        self.centralwidget.setObjectName("centralwidget")        self.pushButton = QtWidgets.QPushButton(self.centralwidget)        self.pushButton.setGeometry(QtCore.QRect(130, 80, 111, 41))        self.pushButton.setObjectName("pushButton")        self.username = QtWidgets.QLineEdit(self.centralwidget)        self.username.setGeometry(QtCore.QRect(260, 80, 271, 41))        self.username.setObjectName("username")        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)        self.pushButton_2.setGeometry(QtCore.QRect(130, 150, 111, 41))        self.pushButton_2.setObjectName("pushButton_2")        self.password = QtWidgets.QLineEdit(self.centralwidget)        self.password.setGeometry(QtCore.QRect(260, 150, 271, 41))        self.password.setObjectName("password")        self.login = QtWidgets.QPushButton(self.centralwidget)        self.login.setGeometry(QtCore.QRect(260, 230, 141, 61))        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 图形用户界面。

往期精彩回顾

聊聊 Python 应用容器化部署流程

被使用次数最多的22个Python外部模块

我是如何用 Redis 做实时订阅推送的?

刚学完python自动化系列文章,就接了一单任务

微软官方的Python教程,7个章节就把Python说通了!

GitHub 标星 7k+,面试官的灵魂 50 问,问到你怀疑人生!

打基础一定要吃透这12类 Python 内置函数

关注公众号,回复关键

字领取对应资源

请把我分享给你身边更多的人

喜欢的话给小编一个在看!

pyqt5如何循环遍历控件名_如何用 PyQt5 快速构建一个简单的 GUI 应用相关推荐

  1. pyqt5如何循环遍历控件名_利用Python的PyQt5编写GUI界面教学,QT5还是比较难的

    由于学校课程的项目,最近最近在学习如何利用Python语言和SQL Server编写一个读者图书借阅.查询管理的小程序.以此为契机吧,自己便开始了学习之路~ 这篇文章主要介绍自己如何使用PyQt5编写 ...

  2. pyqt5如何循环遍历控件名_PyQt5 控件学习(一个一个学习之QObject对象)

    首先我们要知道控件之间的继承结构,并按照它去学习: 下面是基类的继承图: 所以,我们首先学习的是QObject 和 QWidget 这两个,然后再学其他的. 一: QObject 类: 1, 首先看Q ...

  3. [转载] 如何用 PyQt5 快速构建一个简单的 GUI 应用

    参考链接: Python | 使用PyQt设计GUI应用程序 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 介 ...

  4. LabWindows_CVI测试技术及工程应用_学习笔记1(构建一个简单的程序)

    构建一个简单的程序 1.创建工程文件 或File--〉New--〉Project(*.prj),默认名Untitled.prj,存储在Unititled.cws的工作空间中 File--〉Save U ...

  5. 一个表字段做为表名_在冬天,安心做一个简单知足的人 |为你读诗

    知足的快乐,其实才是拥有|第2670期 双十一年卡会员特惠福利 限时268元,再加赠128元<为你读诗第二辑> 时间截至11月11日24:00 ▾  点击收听  ▾是这样的:你曾快乐 作者 ...

  6. python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?

    全文共2800字,预计学习时长6分钟 在繁忙的工作生活中,我们经常忘记给所爱的人发WhatsApp.本教程将使用Python包Twilio编写一个简单的Python脚本来发送WhatsApp消息.我们 ...

  7. keras安装_代码详解:构建一个简单的Keras+深度学习REST API

    在本教程中,我们将介绍一个简单的方法来获取Keras模型并将其部署为REST API.本文所介绍的示例将作为你构建自己的深度学习API的模板/起点--你可以扩展代码,根据API端点的可伸缩性和稳定性对 ...

  8. unity的vr场景怎么做_如何用Unity快速创建一个VR体验

    文章相关引用及参考:uxdesign 不断试验Unity3D,探索Asset Store,并尝试创建出令人称奇的体验. (映维网 2017年08月25日)我(Andrew Coyle)一直希望为虚拟现 ...

  9. 用c语言简单办法做一个字典_如何用c语言做一个简单的英语词典

    展开全部 //新建一个字典文本文件,命名为:dict.dat,内容格式如下: 或下载一个也可 //abandon v.抛弃,放32313133353236313431303231363533e59b9 ...

最新文章

  1. 2020 最烂密码 TOP 200 大曝光,霸榜的竟然是它?
  2. NFV转发吞吐量达120GB 赛特斯要造中国NFV新格局
  3. GridView学习记录(一)
  4. linux和unix文件没有创建时间,Linux中没有文件创建时间的概念
  5. 零基础python必背代码-零基础入门学习python 96集全
  6. UA MATH567 高维统计II 随机向量7 Grothendieck不等式
  7. ubuntu 编译c程序报错:对‘pthread_create’未定义的引用
  8. JavaScript从入门到精通之入门篇(一)概念与语法
  9. web.config文件访问物理路径_计算机操作系统学习笔记(五):文件管理
  10. ECCV 2020 论文大盘点-人员重识别(ReID)篇
  11. php redis list llen,redis llen list 命令简介
  12. php导出 excel
  13. PPT中插入Flash
  14. 小象学院 nlp 自然语言处理项目实战
  15. CT图像之Hu值变换与窗宽窗位调整
  16. 【meshlab使用指南】06、Select Faces/Vertices inside polyline area功能不能选中点/面
  17. 卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具Motrix!
  18. linux 个人云存储_2020年NAS首选,超高速读写备份,联想个人云存储A1深度体验
  19. hyperf搭建与使用RPC微服务
  20. openfalcon源码分析之hbs

热门文章

  1. MySQL:SELECT COUNT 小结
  2. 聊一聊:开源社区应该用中文吗?
  3. Nacos 集群部署模式最佳实践
  4. 一语点破 Java 中的静态 static 关键字
  5. 那些实用与颜值齐飞的桌面!
  6. 百度开源的 71 个项目,看看你用过几个?
  7. Java中如何锁文件
  8. 社区头条:Spring For All 新版上线了!!!
  9. 服务器操作系统的安全策略,服务器操作系统的安全策略
  10. 一位技术人员成长的烦恼及我的分析(转)