ControlSizePyQt - PyQt 版本的统一尺寸和颜色管理系统

张开发
2026/4/20 1:35:21 15 分钟阅读

分享文章

ControlSizePyQt - PyQt 版本的统一尺寸和颜色管理系统
ControlSizePyQt - PyQt 版本的统一尺寸和颜色管理系统概述ControlSizePyQt 是 ControlSize 系统的 PyQt 版本实现提供了一套与 WPF 版本 API 一致的尺寸和颜色管理方案。该系统可以让 PyQt 控件共享相同的尺寸和颜色配置方便统一管理和维护。项目结构ControlSizePyQt/ ├── __init__.py # 包初始化文件 ├── control_size.py # 尺寸和颜色管理模块 ├── pyqt_button.py # PyQt 按钮控件实现 ├── demo.py # 演示程序 └── __pycache__/ # Python 编译缓存核心组件1. control_size.py - 尺寸和颜色管理模块control_size.py模块定义了尺寸和颜色的常量和管理类与 WPF 版本保持 API 一致性。ControlSizeValues - 尺寸静态值# 尺寸类型LargeLargeDefaultDefaultSmallSmallMiniMini# 尺寸值映射size_values{Large:{min_width:120,height:40,font_size:16},Default:{min_width:80,height:32,font_size:14,padding:(12,0,12,0)},Small:{min_width:60,height:24,font_size:12},Mini:{min_width:40,height:20,font_size:11,padding:(8,0,8,0)}}ControlColorValues - 颜色静态值# 颜色类型PrimaryPrimarySuccessSuccessWarningWarningDangerDangerInfoInfoTextTextDefaultDefault# 颜色值映射使用 CSS 颜色字符串Colors{Primary:{bg:#409EFF,border:#409EFF,text:#FFFFFF},Success:{bg:#67C23A,border:#67C23A,text:#FFFFFF},Warning:{bg:#E6A23C,border:#E6A23C,text:#FFFFFF},Danger:{bg:#F56C6C,border:#F56C6C,text:#FFFFFF},Info:{bg:#909399,border:#909399,text:#FFFFFF},Text:{bg:transparent,border:transparent,text:#409EFF},Default:{bg:#F5F7FA,border:#DCDFE6,text:#303133}}ControlSize - 尺寸管理类classControlSize:staticmethoddefset_size(widget,size_type):设置控件尺寸 Args: widget: PyQt 控件对象 size_type: 尺寸类型字符串 (Large, Default, Small, Mini) # 实现尺寸设置逻辑passstaticmethoddefget_size(widget):获取控件尺寸类型 Args: widget: PyQt 控件对象 Returns: str: 尺寸类型字符串 # 实现尺寸获取逻辑passControlColor - 颜色管理类classControlColor:staticmethoddefset_type(widget,color_type):设置控件颜色类型 Args: widget: PyQt 控件对象 color_type: 颜色类型字符串 (Primary, Success, Warning, Danger, Info, Text, Default) # 实现颜色设置逻辑passstaticmethoddefget_type(widget):获取控件颜色类型 Args: widget: PyQt 控件对象 Returns: str: 颜色类型字符串 # 实现颜色获取逻辑pass2. pyqt_button.py - PyQt 按钮控件实现pyqt_button.py实现了ElementButton类是基于ControlSize和ControlColor系统的 PyQt 按钮控件。功能特性多种按钮类型Primary、Success、Warning、Danger、Info、Text、Default通过ControlColor.set_type设置多种尺寸Large、Default、Small、Mini通过ControlSize.set_size设置圆角和圆形支持圆角和圆形按钮图标支持支持图标显示加载状态支持显示加载动画禁用状态支持禁用状态自定义尺寸支持直接设置 width 和 height 覆盖预设尺寸自定义颜色支持直接设置背景色、边框色和前景色覆盖预设颜色关键方法classElementButton(QPushButton):def__init__(self,parentNone,content,icon):初始化按钮 Args: parent: 父控件 content: 按钮文本 icon: 图标文本 super().__init__(parent)# 初始化逻辑defset_content(self,content):设置按钮文本 Args: content: 按钮文本 # 实现文本设置逻辑defset_icon(self,icon):设置按钮图标 Args: icon: 图标文本 # 实现图标设置逻辑defset_is_loading(self,is_loading):设置加载状态 Args: is_loading: 是否显示加载状态 # 实现加载状态设置逻辑defset_is_round(self,is_round):设置是否圆角 Args: is_round: 是否显示圆角 # 实现圆角设置逻辑defset_is_circle(self,is_circle):设置是否圆形 Args: is_circle: 是否显示为圆形 # 实现圆形设置逻辑使用示例基本使用fromPyQt5.QtWidgetsimportQApplication,QVBoxLayout,QWidgetfromControlSizePyQt.pyqt_buttonimportElementButtonfromControlSizePyQt.control_sizeimportControlSize,ControlColor,ControlSizeValues,ControlColorValues appQApplication([])# 创建主窗口windowQWidget()layoutQVBoxLayout(window)# 1. 基本按钮btn_primaryElementButton(content主要按钮)ControlColor.set_type(btn_primary,ControlColorValues.Primary)layout.addWidget(btn_primary)# 2. 不同尺寸按钮btn_largeElementButton(content大型按钮)ControlColor.set_type(btn_large,ControlColorValues.Primary)ControlSize.set_size(btn_large,ControlSizeValues.Large)layout.addWidget(btn_large)btn_smallElementButton(content小型按钮)ControlColor.set_type(btn_small,ControlColorValues.Primary)ControlSize.set_size(btn_small,ControlSizeValues.Small)layout.addWidget(btn_small)# 3. 自定义尺寸按钮btn_customElementButton(content自定义尺寸按钮)ControlColor.set_type(btn_custom,ControlColorValues.Success)btn_custom.setFixedSize(200,60)# 直接设置宽高覆盖预设尺寸layout.addWidget(btn_custom)# 4. 圆角和圆形按钮btn_roundElementButton(content圆角按钮)ControlColor.set_type(btn_round,ControlColorValues.Warning)btn_round.set_is_round(True)layout.addWidget(btn_round)btn_circleElementButton(icon)ControlColor.set_type(btn_circle,ControlColorValues.Danger)btn_circle.set_is_circle(True)layout.addWidget(btn_circle)# 5. 带图标按钮btn_iconElementButton(content带图标按钮,icon)ControlColor.set_type(btn_icon,ControlColorValues.Info)layout.addWidget(btn_icon)# 6. 加载状态按钮btn_loadingElementButton(content加载中)ControlColor.set_type(btn_loading,ControlColorValues.Primary)btn_loading.set_is_loading(True)layout.addWidget(btn_loading)# 7. 禁用按钮btn_disabledElementButton(content禁用按钮)ControlColor.set_type(btn_disabled,ControlColorValues.Primary)btn_disabled.setEnabled(False)layout.addWidget(btn_disabled)# 8. 自定义颜色按钮btn_custom_colorElementButton(content自定义颜色按钮)ControlColor.set_type(btn_custom_color,ControlColorValues.Primary)# 直接设置颜色覆盖预设颜色btn_custom_color.setStyleSheet( QPushButton { background-color: #FF5722; border: 1px solid #FF5722; color: white; border-radius: 4px; padding: 0 12px; } QPushButton:hover { opacity: 0.8; } QPushButton:pressed { opacity: 0.6; } QPushButton:disabled { opacity: 0.4; } )layout.addWidget(btn_custom_color)window.show()app.exec_()运行演示程序# 运行演示程序python ControlSizePyQt/demo.py技术要点API 一致性与 WPF 版本保持相同的 API 设计便于跨平台开发静态值集中管理所有尺寸和颜色值集中在control_size.py中便于统一修改CSS 样式使用 PyQt 的样式表机制实现按钮样式动态尺寸管理通过ControlSize.set_size方法动态设置控件尺寸动态颜色管理通过ControlColor.set_type方法动态设置控件颜色自定义覆盖支持直接设置宽高和样式覆盖预设值加载动画使用 QMovie 实现加载动画效果与 WPF 版本的对应关系功能WPF 版本PyQt 版本尺寸设置ControlSize.SetSize(button, ControlSizeValues.Large)ControlSize.set_size(btn, ControlSizeValues.Large)颜色设置ControlColor.SetType(button, ControlColorValues.Primary)ControlColor.set_type(btn, ControlColorValues.Primary)圆角设置IsRoundTruebtn.set_is_round(True)圆形设置IsCircleTruebtn.set_is_circle(True)加载状态IsLoadingTruebtn.set_is_loading(True)图标设置Icon#xE720;btn.set_icon()自定义尺寸Width200 Height60btn.setFixedSize(200, 60)自定义颜色Background#FF5722通过样式表设置如何扩展添加新的尺寸类型在control_size.py中添加新的尺寸常量# 尺寸类型SuperLargeSuperLarge# 尺寸值映射size_values{SuperLarge:{min_width:150,height:50,font_size:18},# 其他尺寸...}在pyqt_button.py中更新尺寸设置逻辑defset_size(self,size_type):ifsize_typeControlSizeValues.SuperLarge:self.setMinimumWidth(150)self.setFixedHeight(50)self.setFont(QFont(Microsoft YaHei,18))# 其他尺寸处理...添加新的颜色类型在control_size.py中添加新的颜色常量和值# 颜色类型SecondarySecondary# 颜色值映射Colors{Secondary:{bg:#6C757D,border:#6C757D,text:#FFFFFF},# 其他颜色...}在pyqt_button.py中更新颜色设置逻辑defset_color_type(self,color_type):ifcolor_typeControlColorValues.Secondary:self.setStyleSheet( QPushButton { background-color: #6C757D; border: 1px solid #6C757D; color: white; border-radius: 4px; padding: 0 12px; } # 其他样式... )# 其他颜色处理...在其他控件中使用可以将ControlSize和ControlColor系统应用到其他 PyQt 控件fromPyQt5.QtWidgetsimportQLineEditfromControlSizePyQt.control_sizeimportControlSize,ControlColor,ControlSizeValues,ControlColorValues# 创建文本框textboxQLineEdit()# 设置尺寸ControlSize.set_size(textbox,ControlSizeValues.Large)# 设置颜色ControlColor.set_type(textbox,ControlColorValues.Primary)注意事项ControlSize.set_size方法会设置控件的最小宽度、固定高度和字体大小ControlColor.set_type方法会设置控件的背景色、边框色和前景色当直接设置控件的宽高或样式时会覆盖通过ControlSize和ControlColor设置的值加载状态会显示动画并禁用按钮圆形按钮会自动设置为正方形并调整圆角大小图标按钮的图标会显示在文本左侧构建和运行依赖Python 3.6PyQt5安装依赖pipinstallPyQt5运行演示# 运行演示程序python ControlSizePyQt/demo.py总结ControlSizePyQt 提供了与 WPF 版本一致的尺寸和颜色管理系统使 PyQt 控件的样式管理更加统一和方便。通过静态值集中管理和动态设置机制开发者可以快速创建具有一致外观的 PyQt 应用程序。

更多文章