【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面
PyQt5
- 首先安装 Pyhon!
- PyQt5、pyqt5-tools 安装
- 安装可能遇到的问题
- Qt Creator 简单介绍
- 界面构成介绍
- 开发一个最简单的 GUI 程序
- 拖动布局出一个界面
- 保存并将界面转换为 .py 文件
- 运行编写的 GUI 程序
- 组件自适应、UI 与 逻辑分离
- 简单的事件处理
- 给组件设置 id
- 通过 id 设置触发函数
- 实现触发函数
- 运行编写的 GUI 程序
- 复杂一点的程序:汇率转换器
- 拖动布局出界面
- function.partial 传参
- 编写 convert 函数
- 运行编写的 GUI 程序
Qt 官方文档:https://doc.qt.io/archives/qt-4.8/qtgui-module.html
本文参考了:PyQt5(designer)入门教程
首先安装 Pyhon!
安装途径有两个:
- Python官网
- 微软商店搜索
Python
PyQt5、pyqt5-tools 安装
首先安装 PyQt5
模块:
pip install PyQt5
Qt Designer 在 Python3.5 版本从 PyQt5 转移到了 tools,因此还需要安装 pyqt5-tools
:
pip install pyqt5-tools
安装完毕,Win + S 搜索:designer
,应该可以搜到(一开始可能没提示,要打全)。
如果找不到,那就去找 pyqt5_tools
这个模块的路径,... > pyqt5_tools > Qt > bin
这个路径可以打开 designer.exe
。
如果有问题请看后面 安装可能遇到的问题。
安装可能遇到的问题
我遇到的问题我也记录了一下。。。方便后人查阅:
PyQt5:This application failed to start because it could not find or load the Qt platform plugin
Qt Creator 简单介绍
打开 designer
,会弹出 New Form 界面,选择 Main Window 然后点击 Create 即可。
创建工程后界面如下:
界面构成介绍
简单介绍下整个界面的构成:
- 左侧的 Widget Box 是各种可以自由拖动的组件
- 中间的 MainWindow - untitled 窗体是画布,可以在上面放组件
- 右上方的 Object Inspector 可以查看当前 UI 的结构
- 右侧中部的 Property Editor 可以设置当前选中组件的属性
- 右下方的 Resource Browser 可以添加各种素材,比如图片,背景等等,暂时无视。
大致了解了每个板块之后,就可以正式开始编写 UI 了。
开发一个最简单的 GUI 程序
编写 GUI 有两种方法:
- Qt Designer 进行拖动布局
- 使用代码进行布局
不仅仅是 Qt Designer,在可以拖动布局的情况下,是完全不推荐费时费力去手写 GUI 代码的。
拖动布局出一个界面
利用左边的组件,在中间的画布上拖动出这么一个界面:
点击 hello 这个按钮,在右边将它的 objectName 修改为 hellobutton
,以后我们在代码中就可以通过 hellobutton
来调用这个组件,对它进行一系列操作了。(看后面)
预览界面:菜单栏 Form — Preview… 或者 快捷键 Ctrl + S
保存并将界面转换为 .py 文件
菜单栏 File — Save As,将 界面文件(.ui) 保存到某个位置。
利用 pyuic5
工具生成 Python 代码,使用格式:pyuic5 -o name.py name.ui
,
由于我们的界面文件叫做:hello.ui
,因此使用如下:
pyuic5 -o hello.py hello.ui
可以看到 hello.py
已经生成:
运行编写的 GUI 程序
直接运行刚刚生成的 hello.py 是没用的,因为生成的文件并没有程序入口。
因此我们在同一个目录下另外创建一个程序叫做 main.py,并输入如下内容。
注意:第四行的 import hello
,引入我们的 hello.py
,如果是别的名字,请自行修改。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindowimport helloif __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = hello.Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()sys.exit(app.exec_())
然后运行 main.py,就可以看到刚刚编写的 GUI 了。
python main.py
组件自适应、UI 与 逻辑分离
默认情况下,组件并不会自适应缩放,因此我们需要回到 Qt Designer 中进行一些额外的设置。
点击画布空白处,然后在上方工具栏找到 grid layout 或者 form layout,我们点击 grid layout,再按 Ctrl + R 预览,会发现已经可以自适应了。
顺带一提,下图这两个图标用于对齐组件,非常实用。
因为我们已经将 UI(hello.py
/ hello.ui
)跟逻辑(main.py
)分离,因此:
- 保存一下当前界面的 UI 文件
- 再通过
pyuic5 -o hello.py hello.ui
生成 py 文件
即可完成对 UI 的更新,无需改动逻辑部分(main.py
)。
简单的事件处理
刚刚写的 hello.ui
中,我们设置的按钮没有实际作用,因为我们并没有告诉这个按钮应该做什么。
给组件设置 id
我们前面令 按钮 的 id 为 helloButton
,然后我们可以在 main.py
中获取这个按钮。
通过 id 设置触发函数
Qt 中有 “信号和槽(signal and slot)” 这个概念,不过目前无需深究,也无需在 Designer 中去设置对应按钮的 信号和槽,直接在 main.py 中 MainWindow.show()
后面加入下面这行代码。
ui.hellobutton.clicked.connect(click_success)
这行代码给我们的组件设定另一个触发函数:
hellobutton
就是刚刚设定的按钮的 idclicked
就是 信号,因为是点击,所以我们这里用clicked
click_success
就是对应要调用的 槽,注意这里函数并不写成click_success()
实现触发函数
刚刚设置了按钮的触发并绑定了一个函数 click_success
,我们就要在 main.py 中实现它。
import sys
from PyQt5.QtWidgets import QApplication, QMainWindowimport hellodef click_hello():print("点击了hellobutton按钮!!!!!")if __name__ == '__main__':app = QApplication(sys.argv)MainWindow = QMainWindow()ui = hello.Ui_MainWindow()ui.setupUi(MainWindow)MainWindow.show()ui.hellobutton.clicked.connect(click_hello)sys.exit(app.exec_())
运行编写的 GUI 程序
UI 跟 逻辑 分离的好处就在这里,我们不用去管 HelloWorld.py
,直接运行修改完的 main.py
。
点击按钮,控制台中就会有输出了。
复杂一点的程序:汇率转换器
拖动布局出界面
function.partial 传参
在上一节,我们介绍了如何让按钮响应点击操作,但是并没有接受任何参数,而且只是在控制台输出。这次我们的程序要接收输入的参数,再显示会页面上,必然会涉及到传参,正常传参是不行的,那么要如何进行传参呢?
对于传参,有两种解决方案:
- 使用 lambda
- 使用
functool.partial
下面我们使用 partial
。
partial
的用法如下所示:第一个参数是函数名,后面的参数是接收的参数。
partial(function, arg1, arg2, ......)
要使用 partial
传参,我们就要在程序(main.py
)的头部加上下面这行。
from functools import partial
然后我们把上一节中的按钮触发那行代码修改成下面这样即可:
函数名为 convert
,接收一个参数 ui
。
ui.hellobutton.clicked.connect(partial(convert, ui))
编写 convert 函数
我们给 按钮 设定 ID 为 convertButton
,左文本框 设定 ID 为 leftLine
,给 右文本框 设定 ID 为 rightLine
。
首先,我们要获取用户输入的数字,获取文本使用的是 text()
方法,因此读取用户输入的代码如下:
input = ui.leftLine.text()
接着进行汇率转换,注意这里要进行类型转换:
result = float(input) * 6.7
最后让右边的文本框显示结果:
ui.rightLine.setText(str(result))
convert
函数完整代码:
def convert(ui):input = ui.leftLine.text()result = float(input) * 6.7ui.rightLine.setText(str(result))
运行编写的 GUI 程序
【PyQt5】PyQt5 安装 以及使用 designer 开发 python GUI 界面相关推荐
- eclipse安装PyDev-使用eclipse开发python
eclipse安装PyDev-使用eclipse开发python 文章目录 eclipse安装PyDev-使用eclipse开发python 1.简介 2.安装教程 2.1 简易在线安装 2.2 离线 ...
- python开发的gui界面,python写gui应用程序
python 编写gui界面有哪些 安装wxPython下面是wxPython特别基础的使用方法,将以一个小程序为例来说明,它的功能是在一个文本框中输入文件名,点击open按钮,会在另一个文本框中显示 ...
- Python GUI界面编程-初识
图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上 ...
- Python GUI界面编程初步 05- GUI框架PyQt的运用 - 01 PyQt的详细安装和基本使用
前言: 在01节里面,我们简单的讨论了一下各个GUI框架的优劣.PyQt作为一个传统的GUI的兼容工具,对拖拽来设计GUI的开发来说是极其方便和简单的. 1 简介: PyQt connects the ...
- python界面开发-python 图形界面编程(GUI)
1. Tkinter 在开始GUI编程之前,需要先了解这几个概念:窗口和控件.事件驱动处理.布局管理器. 窗体控件: 窗体.标签.按钮.列表框.滚动条等. 事件驱动:按下按钮及释放.鼠标移动.按回车键 ...
- Python GUI界面开发软件综述
参考致谢: 28款Python GUI开发框架开源软件 https://www.cnblogs.com/muziyunxuan/archive/2017/12/26/8117875.html Py之G ...
- Python GUI界面编程初步 01 - GUI库的特点和选择
1 Python 的常用GUI库和特点 Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix ...
- Python GUI界面编程初步 02 - Tkinter基础
前言: 前一篇我们大致介绍了Python编程的几个常用的GUI的工具和库.现在我们开始用其中的几个进行GUI设计. 考虑到,现在有一个项目包括传统的GUI编程,同时客户需要比较完备的图形显示,而这个又 ...
- 【Qt设计开发】GUI界面设计开发
文章目录 一.Qt简介和下载安装 二.Qt入门 2.1 创建第一个项目 2.2 快捷键和命名规范 2.3 Qt项目和VS2022项目相互转换 三.Qt基础 3.1 Qt对象树和窗口坐标系概念 3.2 ...
最新文章
- CSS中的emmet语法(使用缩写的方式提高书写html编写速度)
- Linux绝对权限和相对权限法,Linux基础学习笔记
- StartActivityForResult(中规中矩版 获得Acivity2的性别选择)
- 什么是MIME?什么是MIME邮件?
- Flutter - sqflite(原滋原味)
- Struts2 入门
- Gartner预测:SD-WAN将取代路由
- Cloud for Customer的mobile setting前台实现
- php 怎么定义一个空对象,php定义空对象的方法
- pat 乙级 1012 数字分类(C++)
- 前端学习(2624):state
- P5706 【深基2.例8】再分肥宅水(python3实现)
- PAT乙级(1007 素数对猜想)
- Redis(三)源source编译
- 一周最新示例代码回顾 (4/9–4/15)
- 【毕设选题】基于C51单片机的毕业设计题目项目汇总 - 500例
- oracle 同义词循环连,Oracle出现ORA-01775: 同义词的循环链问题
- 移动硬盘 计算机里不显示盘符,移动硬盘插在电脑上不显示盘符是怎么回事啊?...
- QT关于屏幕保护程序
- 解决Idea中项目模块没有蓝色方块
热门文章
- 维基链能成为下一个以太坊吗?
- 3g造就了电商,4g推动了微商,5g物联网的时代,能够成就什么?
- Java中Jsp和Servlet上传和下载文件
- iif sql_SQL IIF语句概述
- azure云数据库_在Azure SQL数据库中配置电子邮件通知
- aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)
- tSQLt单元测试的测试驱动数据库开发(TDDD)基础
- Oracle——集合运算
- [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串...
- C++学习笔记39:进程概念