要对我们项目的功能进行封装,做一个GUI界面

开始学图形界面,从最热门的pyqt5学起~~

学习大神的视频做得学习笔记

学习视频地址

Python Qt 图形界面编程 - 华为大叔7天带你入门 - PySide2 PyQt5 PyQt PySide

开发环境

  • pycharm
  • python+PyQt5库
  • qt creator

下载QT creator

下载QT的详细教程:下载QT的详细教程

下载QT相关内容的链接集合:下载QT相关内容的链接集合:
//即下载QT creator

下载PyQt5库

  1. 关于PyQt
  2. 关于PyQt和PySide2
    PySide2、PyQt5 都是基于著名的 Qt 库。

Qt库里面有非常强大的图形界面开发库,但是Qt库是C++语言开发的,PySide2、PyQt5可以让我们通过Python语言使用Qt。

PySide2、PyQt5 这两者有什么区别呢?

PySide2 是Qt的 亲儿子

PyQt5 是Qt还没有亲儿子之前的收的义子 (Riverbank Computing这个公司开发的)。

那为什么 PyQt5 这个义子 反而比 PySide2 这个亲儿子更出名呢?

原因很简单:PySide2 这亲儿子最近(2018年7月)才出生。

但是亲儿子毕竟是亲儿子,Qt准备大力培养,PySide2 或许更有前途。

已经在使用 PyQt5 的朋友不要皱眉, 两个库的使用 对程序员来说,差别很小:它们的调用接口几乎一模一样。

如果你的程序是PyQt5开发的,通常只要略作修改,比如把导入的名字从 PyQt5 换成 PySide2 就行了。反之亦然。

命令行安装PyQt5

命令行中直接执行

pip install pyqt5-tools

Qt简单界面学习

创建一个简单的界面

from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEditapp = QApplication([])window = QMainWindow()
window.resize(500, 400)
window.move(300, 310)
window.setWindowTitle('薪资统计')textEdit = QPlainTextEdit(window)
textEdit.setPlaceholderText("请输入薪资表")
textEdit.move(10,25)
textEdit.resize(300,350)button = QPushButton('统计', window)
button.move(380,80)window.show()app.exec_()

运行结果

QApplication

app = QApplication([])

QApplication 提供了整个图形界面程序的底层管理功能,比如:

初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等…

既然QApplication要做如此重要的初始化操作,所以,我们必须在任何界面控件对象创建前,先创建它。

QMainWindow(主窗口)、QPlainTextEdit(文本框)、QPushButton(按钮)

window = QMainWindow()
window.resize(500, 400)//决定它的大小宽度500 高度400
window.move(300, 310)// 控制主窗口出现在显示器屏幕的什么位置 300决定宽 310决定高 距离屏幕右上角的距离
window.setWindowTitle('薪资统计')//窗口的标题
textEdit = QPlainTextEdit(window)//创建在window内
textEdit.setPlaceholderText("请输入薪资表")//提示文本
textEdit.move(10,25)//相对于父窗口的位置 除了标题框的位置
textEdit.resize(300,350)//设置文本框的大小
button = QPushButton('统计', window)//按钮标签以及父窗口
button.move(380,80)/相对于父窗口的位置 除了标题框的位置

QMainWindow、QPlainTextEdit、QPushButton 是3个控件类,分别对应界面的主窗口、文本框、按钮

他们都是控件基类对象QWidget的子类。

要在界面上 创建一个控件 ,就需要在程序代码中 创建 这个 控件对应类 的一个 实例对象。

window.show()//执行这个方法 窗口才能出来 表示要展示在界面上
app.exec_()//防止展示window.show()一闪而过就没了 等待用户的输入 这个程序是一个死循环

界面动作处理 (signal 和 slot)

在 Qt 系统中, 当界面上一个控件被操作时,比如 被点击、被输入文本、被鼠标拖拽等, 就会发出 信号 ,英文叫 signal。就是表明一个事件(比如被点击、被输入文本)发生了。

我们可以预先在代码中指定 处理这个 signal 的函数,这个处理 signal 的函数 叫做 slot 。

定义一个函数

def handleCalc()://print('统计按钮被点击了')info = textEdit.toPlainText()

指定如果发生了button 按钮被点击的事情,需要让 handleCalc 来处理,像这样
加载按钮处

button = QPushButton('统计', window)
button.move(380,80)
button.clicked.connect(handleCalc)
//让handleCalc来处理button被点击的操作
//把button被点击(clicked)的信号(signal),连接(connect)到了handleCalc这样的一个slot上

完整的代码定义

def handleCalc():info = textEdit.toPlainText()# 薪资20000 以上 和 以下 的人员名单salary_above_20k = ''salary_below_20k = ''for line in info.splitlines():if not line.strip():continueparts = line.split(' ')# 去掉列表中的空字符串内容parts = [p for p in parts if p]name,salary,age = partsif int(salary) >= 20000:salary_above_20k += name + '\n'else:salary_below_20k += name + '\n'QMessageBox.about(window,'统计结果',f'''薪资20000 以上的有:\n{salary_above_20k}\n薪资20000 以下的有:\n{salary_below_20k}''')

运行结果

封装到类中

from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit,QMessageBoxclass Stats():def __init__(self):self.window = QMainWindow()self.window.resize(500, 400)self.window.move(300, 300)self.window.setWindowTitle('薪资统计')self.textEdit = QPlainTextEdit(self.window)self.textEdit.setPlaceholderText("请输入薪资表")self.textEdit.move(10, 25)self.textEdit.resize(300, 350)self.button = QPushButton('统计', self.window)self.button.move(380, 80)self.button.clicked.connect(self.handleCalc)def handleCalc(self):info = self.textEdit.toPlainText()# 薪资20000 以上 和 以下 的人员名单salary_above_20k = ''salary_below_20k = ''for line in info.splitlines():if not line.strip():continueparts = line.split(' ')# 去掉列表中的空字符串内容parts = [p for p in parts if p]name,salary,age = partsif int(salary) >= 20000:salary_above_20k += name + '\n'else:salary_below_20k += name + '\n'QMessageBox.about(self.window,'统计结果',f'''薪资20000 以上的有:\n{salary_above_20k}\n薪资20000 以下的有:\n{salary_below_20k}''')app = QApplication([])
stats = Stats()
stats.window.show()
app.exec_()

测试数据

薛蟠 4560 25
薛蝌 4460 25
薛宝钗 35776 23
薛宝琴 14346 18
王夫人 43360 45
王熙凤 24460 25
王子腾 55660 45
王仁 15034 65
尤二姐 5324 24
贾芹 5663 25
贾兰 13443 35
贾芸 4522 25
尤三姐 5905 22
贾珍 54603 35

测试结果

打开qt designer

路径
在下载了PySide2 就会有qt designer

C:\Users\phl\AppData\Local\Programs\Python\Python38\Lib\site-packages\PySide2

动态加载UI文件

前提:现在我有一个GUI界面设计.ui的文件与py代码在同一目录下

  • PySide2:
from PySide2.QtWidgets import QApplication, QMessageBox
from PySide2.QtUiTools import QUiLoader
from PySide2.QtCore import QFiledef __init__(self):# 从文件中加载UI定义qfile_stats = QFile("GUI界面设计.ui")qfile_stats.open(QFile.ReadOnly)qfile_stats.close()# 从 UI 定义中动态 创建一个相应的窗口对象# 注意:里面的控件对象也成为窗口对象的属性了# 比如 self.ui.button , self.ui.textEditself.ui = QUiLoader().load(qfile_stats)
  • PyQt5:
    main.ui是在同一目录层级下
from PyQt5 import uicclass Stats:def __init__(self):# 从文件中加载UI定义self.ui = uic.loadUi("GUI界面设计.ui")

完整代码

# from PySide2.QtWidgets import QApplication, QMessageBox
# from PySide2.QtUiTools import QUiLoader
# from PySide2.QtCore import QFile
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton,  QPlainTextEdit, QMessageBox
from PyQt5 import uicclass Stats:def __init__(self):# 从文件中加载UI定义# qfile_stats = QFile("GUI界面设计.ui")# qfile_stats.open(QFile.ReadOnly)# qfile_stats.close()# 从 UI 定义中动态 创建一个相应的窗口对象# 注意:里面的控件对象也成为窗口对象的属性了# 比如 self.ui.button , self.ui.textEdit# self.ui = QUiLoader().load(qfile_stats)self.ui = uic.loadUi("GUI界面设计.ui")self.ui.button.clicked.connect(self.handleCalc)//注意修改的地方 原先没有ui button一定要是ui中对象名def handleCalc(self):info = self.ui.textEdit.toPlainText()//textEdit也要是ui中的对象名salary_above_20k = ''salary_below_20k = ''for line in info.splitlines():if not line.strip():continueparts = line.split(' ')parts = [p for p in parts if p]name,salary,age = partsif int(salary) >= 20000:salary_above_20k += name + '\n'else:salary_below_20k += name + '\n'QMessageBox.about(self.ui,//同样原先显示时是self.window'统计结果',f'''薪资20000 以上的有:\n{salary_above_20k}\n薪资20000 以下的有:\n{salary_below_20k}''')app = QApplication([])
stats = Stats()
stats.ui.show()//原先是stats现在是stats.ui
app.exec_()

转化UI文件为Python代码

  • 安装的是PyQt5
pyuic5 main.ui > ui_main.py
  • 安装的是PySide2
pyside2-uic main.ui > ui_main.py

然后在你的代码文件中这样使用定义界面的类

import sys
from PyQt5 import QtWidgets, uicfrom PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *from ui_main import Ui_Form
//ui_main是我转化过来的py文件 Ui_Form转化的类型 我转化的是Ui_Form 可以是Ui_MainWindowclass MainWindow(QtWidgets.QMainWindow, Ui_Form):def __init__(self, *args, obj=None, **kwargs):super(MainWindow, self).__init__(*args, **kwargs)self.setupUi(self)app = QtWidgets.QApplication(sys.argv)window = MainWindow()
window.show()
app.exec()

界面布局 Layout

使得框体随着窗体变化而变化

  1. QHBoxLayout 水平布局
    QHBoxLayout 把控件从左到右 水平横着摆放,如下所示
  2. QVBoxLayout 垂直布局
    QHBoxLayout 把控件从上到下竖着摆放,如下所示
  3. QGridLayout 表格布局
    QGridLayout 把多个控件 格子状摆放,有的控件可以 占据多个格子,如下所示
  4. QFormLayout 表单布局
    QFormLayout 表单就像一个只有两列的表格,非常适合填写注册表单这种类型的界面,如下所示
    直接调整布局的方法

    选中几部分 布局 > 水平布局就可 慢慢调整使得整体是某个布局 使得窗体可以整体变动

    如果我们选择的主窗口是MainWindow类型,要给MainWindow整体设定Layout,必须 先添加一个控件到 centralwidget 下面 ,如下

    然后才能右键点击 MainWindow,选择布局,如下

调整空间位置和大小

情况1:按钮控件过大
效果图 //将文本框与按钮垂直布局
//但是又不希望按钮控件那么大 所以需要调整空间位置和大小

  1. 将按钮的水平策略从Minimum改成Fixed

    效果图
  2. 要将按钮居中的话
    先拖放一个水平布局的layout布局
    然后把按钮拖进layout布局中

    情况2:如何让三个水平布局的功能 有大有小呢?

调整“消息头”的水平伸展数据为2 使得“消息头”为其他两个按钮的两倍大小
//如果调整成其他大小的时候 米有那么明显 因为“+””-“两个按钮也有自己的最小的大小
//当放大窗体时“消息头”就会随之变大 而“+””-“不会变化

情况3:调整控件上下间距

要调整控件上下间距,可以给控件添加layout,然后通过设定layout的上下的padding 和 margin 来调整间距。

希望调整”消息体“下的文本框与左边的文本框一样大

创建一个水平布局的layout 将”消息体“放入其中

调整上图的数据

GUI界面设计学渣笔记———使用PyQt做深度学习的可视化界面相关推荐

  1. 如何使用深度学习识别 UI 界面组件?

    导读:智能生成代码平台 imgcook 以 Sketch.PSD.静态图片等形式的视觉稿作为输入,可以一键生成可维护的前端代码,但从设计稿中获取的都是 div.img.span 等元件,而前端大多是组 ...

  2. 吸烟行为检测系统(Python+YOLOv5深度学习模型+清新界面)

    摘要:吸烟行为检测软件用于日常场景下吸烟行为监测,快速准确识别和定位吸烟位置.记录并显示检测结果,辅助公共场所吸烟安全报警等.本文详细介绍吸烟行为检测系统,在介绍算法原理的同时,给出Python的实现 ...

  3. AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍

    AI Studio 飞桨 零基础入门深度学习笔记4-飞桨开源深度学习平台介绍 深度学习框架 深度学习框架优势 深度学习框架设计思路 飞桨开源深度学习平台 飞桨开源深度学习平台全景 框架和全流程工具 模 ...

  4. 二维码及条形码智能检测软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:二维码及条形码智能检测软件用于检测常用条形码和二维码,对其位置进行精确定位.记录并显示检测结果,辅助识别算法定位条形码或二维码.本文详细介绍二维码及条形码智能检测软件,在介绍算法原理的同时,给出 ...

  5. 智能扑克牌识别软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:智能扑克牌识别软件利用视觉方法检测和识别日常扑克牌具体花色与数字,快速识别牌型并标注结果,帮助计算机完成扑克牌对战的前期识别步骤.本文详细介绍基于深度学习的智能扑克牌识别软件,在介绍算法原理的同 ...

  6. 机场航拍图像检测软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:机场航拍图像检测软件使用深度学习技术检测机场航拍图像中的飞机目标等,识别航拍目标等结果并记录和保存,辅助机场智能管理运行.在介绍算法原理的同时,给出Python的实现代码.训练数据集,以及PyQ ...

  7. 笔记:计算机视觉与深度学习-北邮-鲁鹏-2020年录屏-第一讲

    笔记:计算机视觉与深度学习-北邮-鲁鹏-2020年录屏 写在开头(重复的) 1.课程来源:B站视频. 2.笔记目的:个人学习+增强记忆+方便回顾 3.时间:2021年4月8日 4.同类笔记链接:(钩子 ...

  8. 智能零售柜商品检测软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:智能零售柜商品检测软件用于识别零售柜常见商品,检测商品名和位置以了解销售情况,为零售柜商品智能检测和自动销售提供检测功能.本文详细智能零售柜商品检测软件,在介绍算法原理的同时,给出Python的 ...

  9. 交通信号标志识别软件(Python+YOLOv5深度学习模型+清新界面)

    摘要:交通信号标志识别软件用于交通信号标志的检测和识别,利用机器视觉和深度学习智能识别交通标志并可视化记录,以辅助无人驾驶等.本文详细介绍交通信号标志识别软件,在介绍算法原理的同时,给出Python的 ...

  10. 人脸活体检测系统(Python+YOLOv5深度学习模型+清新界面)

    摘要:人脸活体检测系统利用视觉方法检测人脸活体对象,区分常见虚假人脸,以便后续人脸识别,提供系统界面记录活体与虚假人脸检测结果.本文详细介绍基于YOLOv5深度学习技术的人脸活体检测系统,在介绍算法原 ...

最新文章

  1. 解读:欧盟委员会2021年《人工智能法》提案
  2. tiny4412 linux+qtopia nfs网络文件系统的挂载
  3. Ubuntu下各种服务搭建及操作技巧
  4. leancloud的技术面试指南
  5. 小汤学编程之JAVA基础day05——数组
  6. c+字符串数组_了解C ++字符串数组
  7. ABBYY FineReader PDF for Mac(多功能PDF转换工具)
  8. atitit. web 在线文件管理器最佳实践(1)--- elFinder 的使用流程解决之道 。打开浏览服务器文件夹java .net php
  9. 浅学JSON——Json.NET之首次试手
  10. 老兵戴辉:华为操作系统28年史
  11. UiPath调用超级鹰识别验证码
  12. JAVA数据结构之Map和Set
  13. BG2RHE - 树莓派3B+外置wifi解决金属外壳屏蔽问题
  14. MiniGUI中的几个画线函数
  15. Apache的域名配置
  16. CSS鼠标划过背景渐变效果
  17. 关于unity数值资源序列化后在windows和android平台的本地读取
  18. 谷歌的无痕模式有什么好处_为什么Google的新搜索结果设计是黑暗的模式
  19. Java编程思想笔记——并发3
  20. 5、条件判断语句和while循环语句

热门文章

  1. U盘修复,写保护,这个必须推荐!安国(Alcor)AU6983 4G U盘写保护修复记
  2. 计算机里面为什么只剩c盘,电脑只剩下C盘了,怎么处理
  3. SDL Trados Studio 2021(CAT翻译软件)官方中文版V16.1.5.4270 | 最新塔多思翻译软件下载
  4. ThinkPHP多语言包功能使用
  5. python计算化学浓度_理论与计算化学 - 计算模拟 - 程序代码 - 小木虫论坛-学术科研互动平台...
  6. 批处理之for /r
  7. 使用三边定位算法进行室内定位
  8. 设置桌面上计算机的图标更改,电脑如何修改桌面应用的图标
  9. 迟来太久的2020年总结与2021展望
  10. java小说网站源码_基于java的小说网站代码(全)