pyqt5如何循环遍历控件名_如何用 PyQt5 快速构建一个简单的 GUI 应用
点击上方“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 应用相关推荐
- pyqt5如何循环遍历控件名_利用Python的PyQt5编写GUI界面教学,QT5还是比较难的
由于学校课程的项目,最近最近在学习如何利用Python语言和SQL Server编写一个读者图书借阅.查询管理的小程序.以此为契机吧,自己便开始了学习之路~ 这篇文章主要介绍自己如何使用PyQt5编写 ...
- pyqt5如何循环遍历控件名_PyQt5 控件学习(一个一个学习之QObject对象)
首先我们要知道控件之间的继承结构,并按照它去学习: 下面是基类的继承图: 所以,我们首先学习的是QObject 和 QWidget 这两个,然后再学其他的. 一: QObject 类: 1, 首先看Q ...
- [转载] 如何用 PyQt5 快速构建一个简单的 GUI 应用
参考链接: Python | 使用PyQt设计GUI应用程序 点击上方"AirPython",选择"加为星标" 第一时间关注 Python 技术干货! 1. 介 ...
- LabWindows_CVI测试技术及工程应用_学习笔记1(构建一个简单的程序)
构建一个简单的程序 1.创建工程文件 或File--〉New--〉Project(*.prj),默认名Untitled.prj,存储在Unititled.cws的工作空间中 File--〉Save U ...
- 一个表字段做为表名_在冬天,安心做一个简单知足的人 |为你读诗
知足的快乐,其实才是拥有|第2670期 双十一年卡会员特惠福利 限时268元,再加赠128元<为你读诗第二辑> 时间截至11月11日24:00 ▾ 点击收听 ▾是这样的:你曾快乐 作者 ...
- python脚本编写_如何用Python包编写一个简单的脚本,表达你对父母的爱?
全文共2800字,预计学习时长6分钟 在繁忙的工作生活中,我们经常忘记给所爱的人发WhatsApp.本教程将使用Python包Twilio编写一个简单的Python脚本来发送WhatsApp消息.我们 ...
- keras安装_代码详解:构建一个简单的Keras+深度学习REST API
在本教程中,我们将介绍一个简单的方法来获取Keras模型并将其部署为REST API.本文所介绍的示例将作为你构建自己的深度学习API的模板/起点--你可以扩展代码,根据API端点的可伸缩性和稳定性对 ...
- unity的vr场景怎么做_如何用Unity快速创建一个VR体验
文章相关引用及参考:uxdesign 不断试验Unity3D,探索Asset Store,并尝试创建出令人称奇的体验. (映维网 2017年08月25日)我(Andrew Coyle)一直希望为虚拟现 ...
- 用c语言简单办法做一个字典_如何用c语言做一个简单的英语词典
展开全部 //新建一个字典文本文件,命名为:dict.dat,内容格式如下: 或下载一个也可 //abandon v.抛弃,放32313133353236313431303231363533e59b9 ...
最新文章
- 2020 最烂密码 TOP 200 大曝光,霸榜的竟然是它?
- NFV转发吞吐量达120GB 赛特斯要造中国NFV新格局
- GridView学习记录(一)
- linux和unix文件没有创建时间,Linux中没有文件创建时间的概念
- 零基础python必背代码-零基础入门学习python 96集全
- UA MATH567 高维统计II 随机向量7 Grothendieck不等式
- ubuntu 编译c程序报错:对‘pthread_create’未定义的引用
- JavaScript从入门到精通之入门篇(一)概念与语法
- web.config文件访问物理路径_计算机操作系统学习笔记(五):文件管理
- ECCV 2020 论文大盘点-人员重识别(ReID)篇
- php redis list llen,redis llen list 命令简介
- php导出 excel
- PPT中插入Flash
- 小象学院 nlp 自然语言处理项目实战
- CT图像之Hu值变换与窗宽窗位调整
- 【meshlab使用指南】06、Select Faces/Vertices inside polyline area功能不能选中点/面
- 卸载 x 雷某度!GitHub 标星 1.5w+,从此我只用这款全能高速下载工具Motrix!
- linux 个人云存储_2020年NAS首选,超高速读写备份,联想个人云存储A1深度体验
- hyperf搭建与使用RPC微服务
- openfalcon源码分析之hbs