python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址)

2023-11-05


一.前言

播客二连发,本次使用PyQt5模仿b站网页端的一些组件,如:首页banner、一般视频组件、排行榜,撰写本篇,记录下UI设计过程以及一些细节,小组件均已打包好放在了文末,大家一定要看到最后呀~

二.展示

1.banner

本次尽最大程度模仿了b站的banner,学了个几分样。后面有详细介绍banner的设计思路。

1.静图

在这里插入图片描述

2.动图

请添加图片描述

2.一般视频组件

1.静图

默认状态
在这里插入图片描述

hover状态
在这里插入图片描述

2.动图

请添加图片描述

3.排行榜

1.静图

默认状态
在这里插入图片描述
hover状态
在这里插入图片描述

2.动图

请添加图片描述

三.设计心得(顺序由简到难)

1.排行榜

为什么我把排行榜放在了最简单的呢?是因为这个组件比其他两个组件都简单/笑哭。

这个组件由两部分组成,分别是主体列表和上方悬浮窗口,先说主体:主体由一个QListWidget构成,每个列表项放置自定义的列表组件,列表组件为一个显示排行的QLabel和一个显示标题的QLable组成,把列表组件放置在QListWidgetItem中,最后将每个组件放置到列表中即可。上方悬浮窗口:在创建列表项时,已经创建好每个上方悬浮窗口了,即有几行列表项就有几个上方悬浮窗口,每个悬浮窗口的布局为垂直布局,局部为水平布局,使用QToolButton设置QIcon显示每个图标,使用QLabel配合QPixmap显示图片,这样每个上方悬浮窗口就实例化好了,默认隐藏。UI绘制好后,绑定每个列表组件的enterEvent、leaveEvent方法,比如当鼠标放置在排行为“1”的列表项时,所在的列表项会发出item_hovered_signal信号到主界面,主界面收到此信号后,使用槽函数接收,通过索引确认要展示的悬浮窗口,再通过相对位置计算悬浮窗口要显示的位置,最后把悬浮窗口显示出来,相关代码如下:

在这里插入图片描述

2.一般视频组件

这个组件在b站上是支持鼠标移入后播放视频的,本次简化了此组件,鼠标移入后展示相关数据消失、待看按钮展示。

这个组件整体由主封面和hover面板构成,主封面是一个QLabel,放置在一个自定义的QFrame中,QFrame将一个信号绑定了enterEvent、leaveEvent中,即每当鼠标移入或移出QLabel后,都会发射一个信号,这个信号使得我们的hover面板展示。hover面板指的是悬浮在主封面上方的一个固定区域,此区域由上下两部分组成,整体是放在一个QFrame中,右上角放置“待看”按钮,支持点击切换样式的交互,下方则是一个区域叫做信息面板,此区域背景色为黑色透明渐变,方向是自下而上,区域的上方为三个信息分别是播放数量、弹幕数量和视频时长,每当鼠标移入hover面板后,信息面板通过透明度变化的动画进行隐藏,这时状态为隐藏的“待看”按钮透明度发生变化,展示到主界面上,动画的持续时间为450ms,当鼠标移出组件时,动画反向播放。设置动画的相关代码如下:

在这里插入图片描述

3.banner

本次banner设计最耗时,因为整体布局没有拿捏好,造成了许多时间的浪费。

banner整体布局为垂直布局,是由主封面和hover面板构成,主封面为QLabel,通过放置QPixmap的方式展示封面。hover面本由背景QFrame和hover区域构成,先说hover区域,它的布局为垂直布局,上方为水平布局,左侧放置banner标题,右侧放置可点击切换的按钮,布局下方放置“点点”,有多少个banner主封面,就生成几个这样的组件,再说背景QFrame,这里涉及到一个问题,如何才能根据主封面设置背景QFrame的背景颜色呢?相关代码附在了下方,大概思路是:将当前QPixmap转化成Image,由于每个QPixmap的大小是固定的,所以可以指定一个QPoint提取这个位置所在像素的颜色,最后转化成RGB格式,通过改变QSS的方式改变背景QFrame的颜色。

在这里插入图片描述

四.总结

本次使用PyQt5模仿了B站的一些WEB端小组件,像不像三分样,撰写本篇记录下开发的流程,与大家分享我在设计UI上的心得与体会,办法总比困难多,解决问题的方法也不仅仅只有一个,如果觉得本篇博文对你有帮助,能点个赞么?

在这里插入图片描述

五.下载地址

1.一般视频组件
2.排行榜
3.banner

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址) 的相关文章

随机推荐

  • 局域网配置网站DNS服务器的安装

    小提示 要想成功部署DNS服务 运行Windows Serve 2003的计算机中必须拥有一个静态IP地址 只有这样才能让DNS客户端定位DNS服务器 另外如果希望该DNS服务器能够解析Internet上的域名 还需保证该DNS服务器能正常
  • STM32单片机示例:多个定时器级联使用

    文章目录 目的 基础说明 关键配置与代码 示例链接 目的 有些情况下会遇到单片机的定时器位数不够用 这时候可以使用低定时器级联的方式来处理 这里将对此做个示例说明 基础说明 这里说的定时器级联是指一个定时器正常计数工作 然后在发生溢出时发送
  • PYthon 转换HTML到Text纯文本

    今天项目需要将HTML转换为纯文本 去网上搜了一下 发现Python果然是神通广大 无所不能 方法是五花八门 拿今天亲自试的两个方法举例 以方便后人 方法一 1 安装nltk 可以去pipy装 注 需要依赖以下包 numpy PyYAML
  • AT24C02的使用说明和完整代码-51单片机

    AT24C02的使用说明和完整代码 51单片机 简述 at24c02为存储器芯片 可以使用单片机将数据存入其中 同时也可以任意读取 at24c02的原理及使用方法在其说明资料中已有充分的讲述 本篇仅对其使用的关键步骤进行罗列 以及说明一下具
  • MySQL主从复制的实现

    MySQL主从复制的理解图 MySQL Replication原理 主从复制 也称 AB 复制 允许将来自一个MySQL数据库服务器 主服务器 的数据复制到一个或多个MySQL数据库服务器 从服务器 复制是异步的 从站不需要永久连接以接收来
  • React中文文档之Lifting State Up

    Lifting State Up 提升状态 经常的 几个组件需要映射相同的数据改变 我们推荐提升共享的state状态到它们最近的公共祖先元素 让我们看看这是如何实现的 在这个章节 我们将创建一个温度计算器 计算在一个给定的温度 水是否会沸腾
  • 20200331 --【Python】-- selenium 登录练习

    学习 python 的第59天 模拟腾讯课堂 自动化 登录案例 简单 coding utf 8 Time 2020 3 31 10 52 Author admin Site File 腾讯课堂登录 py Software PyCharm i
  • Allegro显示飞线和隐藏飞线

    隐藏飞线 显示飞线
  • C++ 标准库中数据类型转换

    头文件引用
  • 延迟队列的方案设计

    延迟队列的实现方案 一 应用场景 什么是延时队列 顾名思义 首先它要具有队列的特性 再给它附加一个延迟消费队列消息的功能 也就是说可以指定队列中的消息在哪个时间点被消费 延时队列在项目中的应用场景是比较多的 尤其像电商类平台 1 订单成功后
  • 基于js利用经纬度进行两地的距离计算

    根据地球上两点之间的经纬度计算两点之间的直线距离 经纬度到距离的计算在通信工程中应用比较广泛 所以cosbeta通过搜索找到了一个js的计算脚本 其实是google map的计算脚本 应该算是比较准确了 做成了这个经纬度算距离的工具 今天有
  • 全到哭,阿里新产2023版Java架构核心宝典,涵盖Java进阶所有主流技术

    导言 什么是架构师 对于程序员来说 聊架构是一个永不过时的话题 实际上 每一家公司都有自己对架构师不同的定位 因为不同的公司 所处的阶段 业务模式以及应用场景都不一样 因此对架构师的要求不一样 所以定位也就不同 但是 无论如何 架构师除了优
  • STM32------TFTLCD原理

    目录 TFTLCD简介 一 知识点 1 TFTLCD驱动原理 ALINETEK TFTLCD模块介绍 2 2 8寸TFLCD模块特点 3 TFTLCD模块原理图 4 TFTLCD接口说明 5 并口驱动简介 6 ILI9341驱动时序 7 驱
  • 过滤器使用与bean注入

    1 web xml中各元素启动顺序 在项目启动时 监听器listener最先初始化 然后是过滤器filter 最后是servlet Spring监听器在启动时会读取spring配置文件 进行spring容器的初始化 springMVC的di
  • springBoot上传文件时MultipartFile报null 空 问题解决方法

    1 问题描述 之前用spring MVC 转成spring boot之后发现上传不能用 网上参考说是spring boot已经有CommonsMultipartResolver了 但是我的上传后台接收的还是null 2 第一种解决方法 加入
  • Jenkins中使用火线进行Android静态代码扫描

    背景 火线 是360Qtest测试团队在公司内部经过半年实践后向外推出的一款针对Android代码的静态扫描工具 本文主要介绍如何在Jenkins下植入火线扫描并实时查看结果的配置 环境配置 Jenkins 推荐使用最新的版本 本文使用的是
  • Java基础系列8:Java的序列化与反序列化(修)

    一 简介 对象序列化就是把一个对象变成二进制的数据流的一种方法 通过对象序列化可以方便地实现对象的传输和存储 把对象转换为字节序列的过程称为对象的序列化 把字节序列恢复为对象的过程称为对象的反序列化 对象的序列化主要有两种用途 1 把对象的
  • matlab gui 如何输入矩阵,在matlab中如何输入矩阵方?

    这需要GUI设置 举个例子 By lyqmath DLUT School of Mathematical Sciences BLOG http blog csdn net lyqmathfunction main clc clear all
  • 【华为OD机试真题 JAVA】按身高和体重排队

    JS版 华为OD机试真题 JS 按身高和体重排队 标题 按身高和体重排队 时间限制 1秒 内存限制 262144K 语言限制 不限 某学校举行运动会 学生们按编号 1 2 3 n 进行标识 现需要按照身高由低到高排列 对身高相同的人 按体重
  • python3GUI--模仿一些b站网页端组件By:PyQt5(详细介绍、附下载地址)

    文章目录 一 前言 二 展示 1 banner 1 静图 2 动图 2 一般视频组件 1 静图 2 动图 3 排行榜 1 静图 2 动图 三 设计心得 顺序由简到难 1 排行榜 2 一般视频组件 3 banner 四 总结 五 下载地址 一