本人开发的Python图形界面模块,目前仅支持Windows、Wine、ReactOS,基于PySide,实现窗口非客户区自绘制、自定义亮暗主题、自定义标题颜色、背景模糊,支持PySide1、PySide2、PySide6。最新版本为1.15(龙年新春版)。经过14个版本,本模块已稳如老狗,可在生产环境中直接使用。基础示例代码在PYPI项目官网就有,我编写的Python模块管理2(PMM2)也是用这个重写的(第1版用垃圾tk效率实在太低)。



安装方法:使用此工具: https://tieba.baidu.com/p/8895885980 或者终端输入“pip install PySideX-Customized-Window==1.15”(X填版本,1、2、6)
导入方法:from PySideX_Customized_Window import *(X填版本,1、2、6)
使用方法:MyWindow直接继承CustomizedWindow(普通自定义窗口)或BlurWindow(背景模糊窗口)类,注意控件应该添加到self.clientArea而不是self里面,clientArea是客户区,嵌套在QWidget内,然后设置窗口大小要用getWindowSizeByClientSize函数转换一下,接收事件应定义MessageHandler函数而不是nativeEvent,其他用法与QWidget完全一致。
使用前建议先去site-packages目录执行一遍模块,各个新增函数在终端有详细介绍,这里不多说了
新增函数:
新增了一堆函数,可自行去官网找示例或运行模块研究终端。这里只列举几个常用的。
window.hwnd():在PySide2、PySide6中同WinId(),在PySide1中返回整数类型窗口hwnd。
window.dpi():PySide1返回系统dpi,PySide2、PySide6返回Qt缩放后的dpi。
window.realdpi():始终返回系统dpi,常见的有96、120、144、168、192等等。。
window.setDarkTheme(themecolour=0):0为系统默认,1为浅色,2为深色。默认值是0。
window.MessageHandler(hwnd, message, wParam, lParam):用于接收Windows窗口消息,在PySide2、PySide6中应定义此函数而不是nativeEvent。
本模块和PyQt-Frameless-Window对比:
PySideX-Customized-Window
1、较易上手
2、除Qt外不依赖第三方库
3、兼容2.6以上所有Python版本
4、兼容Windows XP以上所有版本(未来将添加对2000的支持)
5、支持自动切换亮暗主题
6、支持非客户区自动DPI缩放
7、通过Wine跨平台
8、不支持跟随系统设置Windows 11圆角窗口
9、不支持自定义Windows 11模糊背景类型
10、不支持对话框
PyQt-Frameless-Window
1、门槛较高
2、除Qt外依赖第三方库
3、兼容Python3
4、兼容Windows 7以上所有版本
5、不支持自动切换亮暗主题
6、不支持非客户区自动DPI缩放
7、原生跨平台
8、支持跟随系统设置Windows 11圆角窗口
9、支持自定义Windows 11模糊背景类型
10、支持对话框
综上,本模块的优势在于其极强的兼容性、简单的上手难度和高度的自动化。
我是开发完1.1版本后才知道有PyQt-Frameless-Window这个库的,这位作者还开发了FluentWidgets、MaterialWidgets等库,甚至去卖组件库。我很佩服这位作者,但我认为做界面真的没必要一味地模仿别人的风格,虽然Fluent好看,但每个软件都有其适合的视觉效果,不能一概而论,我就是觉得自己设计的控件风格最好看。你最常用的软件,有哪一个是用Windows默认样式的?而且有不少动画显得十分生硬,没有了Windows11非线性动画灵动和自然的感觉。我还有个疑问,图标库有大量svg文件和Windows11的图标一模一样,请问这些图标是否侵权???如果有时间,我会开发类似的PySide组件库,更注重开发者的定制化,而不是模仿。



安装方法:使用此工具: https://tieba.baidu.com/p/8895885980 或者终端输入“pip install PySideX-Customized-Window==1.15”(X填版本,1、2、6)
导入方法:from PySideX_Customized_Window import *(X填版本,1、2、6)
使用方法:MyWindow直接继承CustomizedWindow(普通自定义窗口)或BlurWindow(背景模糊窗口)类,注意控件应该添加到self.clientArea而不是self里面,clientArea是客户区,嵌套在QWidget内,然后设置窗口大小要用getWindowSizeByClientSize函数转换一下,接收事件应定义MessageHandler函数而不是nativeEvent,其他用法与QWidget完全一致。
使用前建议先去site-packages目录执行一遍模块,各个新增函数在终端有详细介绍,这里不多说了
新增函数:
新增了一堆函数,可自行去官网找示例或运行模块研究终端。这里只列举几个常用的。
window.hwnd():在PySide2、PySide6中同WinId(),在PySide1中返回整数类型窗口hwnd。
window.dpi():PySide1返回系统dpi,PySide2、PySide6返回Qt缩放后的dpi。
window.realdpi():始终返回系统dpi,常见的有96、120、144、168、192等等。。
window.setDarkTheme(themecolour=0):0为系统默认,1为浅色,2为深色。默认值是0。
window.MessageHandler(hwnd, message, wParam, lParam):用于接收Windows窗口消息,在PySide2、PySide6中应定义此函数而不是nativeEvent。
本模块和PyQt-Frameless-Window对比:
PySideX-Customized-Window
1、较易上手
2、除Qt外不依赖第三方库
3、兼容2.6以上所有Python版本
4、兼容Windows XP以上所有版本(未来将添加对2000的支持)
5、支持自动切换亮暗主题
6、支持非客户区自动DPI缩放
7、通过Wine跨平台
8、不支持跟随系统设置Windows 11圆角窗口
9、不支持自定义Windows 11模糊背景类型
10、不支持对话框
PyQt-Frameless-Window
1、门槛较高
2、除Qt外依赖第三方库
3、兼容Python3
4、兼容Windows 7以上所有版本
5、不支持自动切换亮暗主题
6、不支持非客户区自动DPI缩放
7、原生跨平台
8、支持跟随系统设置Windows 11圆角窗口
9、支持自定义Windows 11模糊背景类型
10、支持对话框
综上,本模块的优势在于其极强的兼容性、简单的上手难度和高度的自动化。
我是开发完1.1版本后才知道有PyQt-Frameless-Window这个库的,这位作者还开发了FluentWidgets、MaterialWidgets等库,甚至去卖组件库。我很佩服这位作者,但我认为做界面真的没必要一味地模仿别人的风格,虽然Fluent好看,但每个软件都有其适合的视觉效果,不能一概而论,我就是觉得自己设计的控件风格最好看。你最常用的软件,有哪一个是用Windows默认样式的?而且有不少动画显得十分生硬,没有了Windows11非线性动画灵动和自然的感觉。我还有个疑问,图标库有大量svg文件和Windows11的图标一模一样,请问这些图标是否侵权???如果有时间,我会开发类似的PySide组件库,更注重开发者的定制化,而不是模仿。