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 来调用这个组件,对它进行一系列操作了。(看后面)

预览界面:菜单栏 FormPreview… 或者 快捷键 Ctrl + S

保存并将界面转换为 .py 文件

菜单栏 FileSave 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)分离,因此:

  1. 保存一下当前界面的 UI 文件
  2. 再通过 pyuic5 -o hello.py hello.ui 生成 py 文件

即可完成对 UI 的更新,无需改动逻辑部分(main.py)。

简单的事件处理

刚刚写的 hello.ui 中,我们设置的按钮没有实际作用,因为我们并没有告诉这个按钮应该做什么。

给组件设置 id

我们前面令 按钮 的 id 为 helloButton,然后我们可以在 main.py 中获取这个按钮。

通过 id 设置触发函数

Qt 中有 “信号和槽(signal and slot)” 这个概念,不过目前无需深究,也无需在 Designer 中去设置对应按钮的 信号和槽,直接在 main.pyMainWindow.show() 后面加入下面这行代码。

ui.hellobutton.clicked.connect(click_success)

这行代码给我们的组件设定另一个触发函数:

  • hellobutton 就是刚刚设定的按钮的 id
  • clicked 就是 信号,因为是点击,所以我们这里用 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 界面相关推荐

  1. eclipse安装PyDev-使用eclipse开发python

    eclipse安装PyDev-使用eclipse开发python 文章目录 eclipse安装PyDev-使用eclipse开发python 1.简介 2.安装教程 2.1 简易在线安装 2.2 离线 ...

  2. python开发的gui界面,python写gui应用程序

    python 编写gui界面有哪些 安装wxPython下面是wxPython特别基础的使用方法,将以一个小程序为例来说明,它的功能是在一个文本框中输入文件名,点击open按钮,会在另一个文本框中显示 ...

  3. Python GUI界面编程-初识

    图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面.与早期计算机使用的命令行界面相比,图形界面对于用户来说在视觉上 ...

  4. Python GUI界面编程初步 05- GUI框架PyQt的运用 - 01 PyQt的详细安装和基本使用

    前言: 在01节里面,我们简单的讨论了一下各个GUI框架的优劣.PyQt作为一个传统的GUI的兼容工具,对拖拽来设计GUI的开发来说是极其方便和简单的. 1 简介: PyQt connects the ...

  5. python界面开发-python 图形界面编程(GUI)

    1. Tkinter 在开始GUI编程之前,需要先了解这几个概念:窗口和控件.事件驱动处理.布局管理器. 窗体控件: 窗体.标签.按钮.列表框.滚动条等. 事件驱动:按下按钮及释放.鼠标移动.按回车键 ...

  6. Python GUI界面开发软件综述

    参考致谢: 28款Python GUI开发框架开源软件 https://www.cnblogs.com/muziyunxuan/archive/2017/12/26/8117875.html Py之G ...

  7. Python GUI界面编程初步 01 - GUI库的特点和选择

    1 Python 的常用GUI库和特点 Tkinter: Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口 .Tk 和 Tkinter 可以在大多数的 Unix ...

  8. Python GUI界面编程初步 02 - Tkinter基础

    前言: 前一篇我们大致介绍了Python编程的几个常用的GUI的工具和库.现在我们开始用其中的几个进行GUI设计. 考虑到,现在有一个项目包括传统的GUI编程,同时客户需要比较完备的图形显示,而这个又 ...

  9. 【Qt设计开发】GUI界面设计开发

    文章目录 一.Qt简介和下载安装 二.Qt入门 2.1 创建第一个项目 2.2 快捷键和命名规范 2.3 Qt项目和VS2022项目相互转换 三.Qt基础 3.1 Qt对象树和窗口坐标系概念 3.2 ...

最新文章

  1. CSS中的emmet语法(使用缩写的方式提高书写html编写速度)
  2. Linux绝对权限和相对权限法,Linux基础学习笔记
  3. StartActivityForResult(中规中矩版 获得Acivity2的性别选择)
  4. 什么是MIME?什么是MIME邮件?
  5. Flutter - sqflite(原滋原味)
  6. Struts2 入门
  7. Gartner预测:SD-WAN将取代路由
  8. Cloud for Customer的mobile setting前台实现
  9. php 怎么定义一个空对象,php定义空对象的方法
  10. pat 乙级 1012 数字分类(C++)
  11. 前端学习(2624):state
  12. P5706 【深基2.例8】再分肥宅水(python3实现)
  13. PAT乙级(1007 素数对猜想)
  14. Redis(三)源source编译
  15. 一周最新示例代码回顾 (4/9–4/15)
  16. 【毕设选题】基于C51单片机的毕业设计题目项目汇总 - 500例
  17. oracle 同义词循环连,Oracle出现ORA-01775: 同义词的循环链问题
  18. 移动硬盘 计算机里不显示盘符,移动硬盘插在电脑上不显示盘符是怎么回事啊?...
  19. QT关于屏幕保护程序
  20. 解决Idea中项目模块没有蓝色方块

热门文章

  1. 维基链能成为下一个以太坊吗?
  2. 3g造就了电商,4g推动了微商,5g物联网的时代,能够成就什么?
  3. Java中Jsp和Servlet上传和下载文件
  4. iif sql_SQL IIF语句概述
  5. azure云数据库_在Azure SQL数据库中配置电子邮件通知
  6. aws rds监控慢sql_探索AWS RDS SQL Server上SQL Server集成服务(SSIS)
  7. tSQLt单元测试的测试驱动数据库开发(TDDD)基础
  8. Oracle——集合运算
  9. [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串...
  10. C++学习笔记39:进程概念