登录
/
注册
首页
论坛
其它
首页
科技
业界
安全
程序
广播
Follow
关于
导读
排行榜
资讯
发帖说明
登录
/
注册
账号
自动登录
找回密码
密码
登录
立即注册
搜索
搜索
关闭
CSDN热搜
程序园
精品问答
技术交流
资源下载
本版
帖子
用户
软件
问答
教程
代码
写记录
写博客
小组
VIP申请
VIP网盘
网盘
联系我们
发帖说明
道具
勋章
任务
淘帖
动态
分享
留言板
导读
设置
我的收藏
退出
腾讯QQ
微信登录
返回列表
首页
›
业界区
›
业界
›
使用PySide6/PyQt6实现自定义窗口布局,实现类似FluentW ...
使用PySide6/PyQt6实现自定义窗口布局,实现类似FluentWindow效果
[ 复制链接 ]
吉芷雁
2025-10-19 20:50:02
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
现在在很多项目中,会比较喜欢FluentWindow效果,这种左侧类似于图标菜单或者树形结构的,右侧是是动态窗体或者组件的展示方式,一般不是多文档布局,每次只是打开当前的模块页面,类似于堆叠页面卡片,每次展示最顶端的那个卡片界面。本篇随笔综合介绍一下FluentWindow效果界面的各种展示方式,然后分析页面的内容组成方式,针对性的使用PySide6/PyQt6实现自定义窗口布局的效果。
1、FluentWindow效果界面介绍
在我们的WPF开发框架中,界面布局UI基于lepoco/wpfui(https://github.com/lepoco/wpfui),它的布局也类似于这个FluentWindow的风格,如下所示。
以及一些微软的WPF应用界面(Fluent 主题 https://learn.microsoft.com/zh-cn/dotnet/desktop/wpf/whats-new/net90),也是类似如此的。
或者类似 WinUI 3 Gallery(https://github.com/microsoft/WinUI-Gallery)也是类似的主题风格。
以及WPF界面项目
lepoco/wpfu
i(https://github.com/lepoco/wpfui)
本文主要是针对Python开发领域,对使用PySide6/PyQt6实现自定义窗口布局的探讨,因此也注意PyQt-Fluent-Widgets (https://github.com/zhiyiYo/PyQt-Fluent-Widgets)这个界面组件的实现效果,非常不错,因此对它的实现方式和组合界面的方式进行了一定的研究学习。
2、界面布局的分析
在对这些界面大致了解后,心里希望模拟他们的实现方式,构造一个类似的自定义窗口布局,其中参考上面组件的作者的图示进行分析下。
左侧的导航栏部分,分为了上中下三个部分,其中导航的滚动布局部分,主要就是用来放置一些比较长内容,如列表或者树控件等内容的。
而右侧的内容区域,主要使用QStackWidget的堆叠式组件,类似于卡片集合,每次显示最顶部的一张。
为了使得标题栏和整个窗体的样式一致化,我们需采用无边框的窗口处理,这个可以采用 PySideSix-Frameless-Window(zhiyiYo / PyQt-Frameless-Window),或者参考项目yjg30737pyqt-frameless-window(https://github.com/yjg30737/pyqt-frameless-window),两者都可以。
为了更好的对标题栏进行扩展管理,我参考后者项目进行了修改,并增加了对MacOS和Linux的效果支持(yjg30737pyqt-frameless-window 只有Windows实现,没有MacOS等效果) 。
自定义按钮组件:
界面了无边框窗口的实现后,我们来看看左侧导航栏的实现,首先我们需要把左侧拆分为一个按钮条,其中自定义按钮组件,需要符合下面几个效果,里面包含:
一个 QLabel 作为背景线条(选中标志)
一个图标(QLabel/QPushButton/QToolButton 等)
选中时:背景色变浅
未选中时:恢复正常
鼠标悬停时:有特殊效果(hover 效果)
在 PySide6 里,我们可以通过自定义 QWidget 来实现。其中整个按钮组为单选组(像单选按钮一样,点击一个自动取消其他的选中,或者叫做
互斥选择组
) 管理类,从而组合上面所说的自定义按钮组件。
有了上面的自定义按钮组件(MySelectableItem)和
互斥选择组组件(
MySelectableGroup
),
我们就可以简单完成了导航按钮栏目的设计了,类似下面的效果,实现选择、悬停、移动鼠标进入的样式不同变化
。
内容区组件:
QStackedWidget
是 Qt 里专门用来管理
多个页面/界面
的容器控件,它是Qt框架中的一个堆栈窗口控件,用于在同一空间内堆叠多个子控件(或称“页面”),但一次只显示其中一个。它常用于创建多页面或多视图的应用程序,比如设置向导、选项卡界面(尽管它本身不带选项卡标签)和复杂的表单。
它的工作方式有点像
卡片堆叠
:
一次只显示一个子界面;
可以通过索引(int)或者 widget 实例切换显示的页面;
常用于多页面界面切换(比如“设置/主页/详情”之间切换)。
3、使用PySide6/PyQt6实现自定义窗口布局的效果
Window系统的普通的亮色模式下的效果如下所示。
如果单击折叠按钮,可以看到效果。
如果切换到Windows深色模式下,窗体颜色变为黑色,同时字体颜色对应变化为亮色一些
如果切换到全屏模式下,顶部居中位置有全屏退出提示【按ESC键退出】,效果如下
而MacOS样式,仿照标题栏左侧放置常规按钮,悬停的时候出现按钮图标效果,如下所示。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
实现
使用
PySide6
PyQt6
自定义
相关帖子
postgreSQL 中的自定义操作符
OpenCVSharp:学习连通性检测的使用
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
C#AI系列(5): C#离线实现高效OCR
C语言实现单片机上的malloc函数功能
PostgreSQL数据库在Windows上实现异地自动备份指南-喂饭图文教程
记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题
Claude Code 使用 Skills
如何使用DashVector的多向量检索
追踪链路--使用iptables/ipvs来记录后端pod真实ip
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
千斤顶
照妖镜
相关推荐
业界
postgreSQL 中的自定义操作符
2
835
蔺堰
2025-12-13
业界
OpenCVSharp:学习连通性检测的使用
0
167
颜清华
2025-12-13
代码
如何使用 vxe-gantt table 甘特图来实现多个维度视图展示
1
793
晚能
2025-12-13
业界
C#AI系列(5): C#离线实现高效OCR
0
683
郏琼芳
2025-12-13
安全
C语言实现单片机上的malloc函数功能
1
346
咒卖箴
2025-12-15
业界
PostgreSQL数据库在Windows上实现异地自动备份指南-喂饭图文教程
0
518
姥恫
2025-12-15
安全
记录 Windows系统开启hyper-v ,部分端口被保留,导致端口不能使用而报错的问题
0
202
溜椎干
2025-12-15
安全
Claude Code 使用 Skills
0
219
王妍芳
2025-12-16
业界
如何使用DashVector的多向量检索
0
248
别萧玉
2025-12-16
业界
追踪链路--使用iptables/ipvs来记录后端pod真实ip
0
774
硫辨姥
2025-12-17
回复
(3)
茹静曼
2025-10-26 01:16:06
回复
使用道具
举报
照妖镜
程序园永久vip申请,500美金$,无限下载程序园所有程序/软件/数据/等
感谢分享
仁夹篇
3 天前
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
yyds。多谢分享
晁红叶
前天 07:02
回复
使用道具
举报
照妖镜
猛犸象科技工作室:
网站开发,备案域名,渗透,服务器出租,DDOS/CC攻击,TG加粉引流
这个好,看起来很实用
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
立即注册
回复
本版积分规则
回帖并转播
回帖后跳转到最后一页
浏览过的版块
安全
签约作者
程序园优秀签约作者
发帖
吉芷雁
前天 07:02
关注
0
粉丝关注
17
主题发布
板块介绍填写区域,请于后台编辑
财富榜{圆}
3934307807
991124
anyue1937
9994893
kk14977
6845357
4
xiangqian
638210
5
韶又彤
9997
6
宋子
9983
7
闰咄阅
9993
8
刎唇
9993
9
俞瑛瑶
9998
10
蓬森莉
9951
查看更多
今日好文热榜
691
【Ubuntu】Ubuntu+VScode+ESP-IDF 的环境搭
654
60 秒出高质量科研图!Gemini+DeepSeek 绘
772
追踪链路--使用iptables/ipvs来记录后端pod
157
【译】初探 Visual Studio 2026 全新的用户
316
建筑渗漏治理的标准化实践:基于上海芮生建
48
Aspire 13:从.NET 编排工具到真正的多语言
997
用 .NET 最小化 API 构建高性能 API
394
VonaJS是如何做到文件级别精确HMR(热更新)
386
PHP 值对象实战指南:避免原始类型偏执
98
北京上门收酒机构排行|3家靠谱之选,卖酒
921
好拼|免费在线拼图工具又收到赞助啦
479
数据点的“社交距离”:衡量它们之间的相似
719
告别“草率编程”:Vibe Engineering 如何
10
字符串匹配算法
342
监听小工具-股票监控神奇九转分钟线信号触
427
国内GEO优化技术深度测评:核心维度全景对
366
Avalonia源码解读:Grid(网格控件)
239
研究 TikTok 爆款的人,一定要懂这类下载工
960
Java Optional 完全指南:优雅处理 null 的
26
全面封禁 Cursor!又一家大厂出手了