资讯动态

Toga Travertino 变更日志解读:0.1 到 0.5 版本风格声明系统的演进与源码级实现

发布时间:2026/10/13 6:29:10 来源:尧图企业网站定制
跨平台UI组件桌面应用【免费下载链接】togaA Python native, OS native GUI toolkit.项目地址https://gitcode.com/gh_mirrors/to/toga点击查看免费下载Travertino 是 Toga GUI 工具箱A Python native, OS native GUI toolkit中负责描述用户界面的基础库提供颜色、方向、文本对齐、尺寸等常量与盒模型/布局基类也是 Toga 风格系统Style/Applicator的底层依赖。本文以仓库中的 travertino/CHANGELOG.md 为主体完整梳理 0.1.0 至 0.5.0 各版本的特性、Bug 修复与破坏性变更并结合 travertino/src/travertino/ 下的真实源码逐条印证每项变更的实际落地方式帮助你在升级 Travertino 或定制 Toga 风格系统时准确预判行为差异。阅读前提Travertino 的托管与版本策略变更日志开头有一条关键说明自 0.5.0 起Travertino 已并入 Toga 仓库托管与开发并且与 Toga 同版本号发布原链接指向 Toga 官方发布页此处不赘述。这意味着0.5.0 之后对 Travertino 的任何改动都会随 Toga 的整体发布日志记录不再单独维护独立版本号从仓库结构看travertino/与core/Toga 核心、cocoa/、qt/等后端并列于同一 monorepo 中travertino/pyproject.toml 中[tool.setuptools_scm]的root ..也表明其版本号取自仓库根的 git tag与 Toga 各组件保持同步。因此在阅读下文时需要注意一个时间分界0.5.0 及之前是 Travertino 的独立发布历史0.5.0 之后则以 Toga 的发布日志为准。当前仓库的changes/目录存放的正是 Toga 各组件后续版本的 towncrier 变更片段。0.5.02025-03-14风格声明机制的大版本重构这是 Travertino 历史中改动幅度最大的一次发布包含新特性、Bug 修复、以及多项破坏性变更。下面逐条展开并给出源码佐证。新特性1. 风格属性可用 dataclass 类属性定义0.5.0 允许把validated_property等验证属性直接声明为 dataclass 的类属性对应 issue #141。从源码结构看BaseStyle 的文档字符串明确写道Designed for subclasses to be decorated withdataclass(kw_onlyTrue, reprFalse)即风格子类的标准写法是 dataclass 装饰 类属性声明IDE 也能据此提供构造参数的自动补全。同时style.py 中保留了旧式类方法BaseStyle.validated_property()但调用它会触发DeprecationWarning提示定义风格属性应使用类属性而非类方法。2. BaseStyle 支持|、|、in运算符BaseStyle.or与ior分别实现合并生成新风格与就地合并|会self.copy()后再update(**other)只接受同类型风格或 Mapping否则返回NotImplemented|则直接update自身。in运算符由contains实现它并不检查值而是通过属性的is_set_on(self)判断该属性是否被显式设置过——后者由 validated_property.is_set_on 以实例上是否存在带下划线的私有属性来判定。配合keys()/items()/__iter__BaseStyle整体提供了一套类字典dict-like接口这也是 0.5.0 风格 API 的核心体验。3. 新增list_property声明支持多值风格属性list_property 继承自validated_property对输入做了序列化处理单个字符串会被包成单元素列表非序列值抛出TypeError空序列抛出ValueError并提示用del style.name重置每个元素都会经过Choices.validate逐一校验最终封装为ImmutableList返回保证多值属性不可被意外篡改。Toga 核心的 core/src/toga/style/pack.py 正是从这里导入validated_property、list_property、directional_property等声明器来定义 Pack 风格的各个属性。4. Python 3.13 与 3.14 支持对应 issue #149 与 #223。以当前仓库 travertino/pyproject.toml 为准requires-python 3.11classifiers 覆盖 Python 3.11 至 3.15——可见 0.5.0 发布后最低支持版本又进一步收敛到了 3.11这是以当前仓库实际内容为准时需要说明的版本前提。5. 新增START/END常量constants.py 中新增了START start与END end与既有的LEFT/RIGHT/TOP/BOTTOM/CENTER并列用于支持按书写方向RTL/LTR解析的逻辑对齐Toga 核心的 core/src/toga/style/pack.py 也已在常量导入列表中使用START、END。Bug 修复1. 节点重赋风格后仍保持 applicator 关联并触发重新应用对应 issue #224与下述破坏性变更中的风格应用机制重构属于同一次改造实现细节见下文。2. Font 与非法对象的相等性比较行为修正对应 issue #2330.5.0 变更日志记录为Font 对象与非 Font 对象的相等性检查将抛出异常而不是返回 False。需要说明的是当前仓库 HEAD 的 Font.eq中仍保留try/except AttributeError的防御分支说明这一行为在后续兼容调整中有所变化引用 0.5.0 语义时应以变更日志为准引用当前行为时应以 travertino/src/travertino/fonts.py 源码为准。测试侧可参考 travertino/tests/test_fonts.py其中用a string、5等非 Font 值验证了不等比较路径。破坏性变更Backward Incompatible Changes1.Choices的default参数被废弃Choices 当前的构造签名只接受*constants与string/integer/number/color布尔开关default参数已不存在属性默认值改由validated_property的initial参数承担见 validated.py 的self.initial None if initial is None else self.validate(initial)。2. 放弃 Python 3.8 支持对应 issue #223与新增 3.14 支持同步进行。3. 风格与 applicator 的分配/应用机制全面重构这是 0.5.0 最重要的行为变更核心规则是节点一旦分得 applicator就会立刻尝试应用其风格因此在节点尚未充分初始化前不要给它分配 applicator。源码层面的证据链非常清晰Node.applicator 的 setter赋值时先把applicator.node self再执行self.style._applicator applicator注释明确写着 This triggers style.apply()Node.style 的 setter重新赋风格时会style.copy()并重建IntrinsicSize/Box若此时节点已有 applicator则主动把新风格与该 applicator 关联——这正是上文 Bug 修复 #1 的落点BaseStyle._applicator 的 setter赋给非 None 时立即调用self.apply()。对旧版 Toga 0.5.0环境失败会降级为RuntimeWarning并附带迁移提示升级 Toga 到 0.5.0或将 Travertino 固定到 0.3.0否则抛出RuntimeError且变更日志明确预告未来版本将改为异常。版本判定依赖 compat.py 中的 _toga_lt_5()——它读取toga-core包的安装元数据并带缓存未安装 Toga 时返回 False。4.BaseStyle.copy(applicator)的 applicator 参数被废弃BaseStyle.copy 中传入 applicator 会触发DeprecationWarning官方建议复制后再单独赋值 applicator以配合新的分配即应用语义。5.Style.layout()API 正式定型node参数移除BaseStyle.layout 的当前签名是layout(self, viewport)风格实例可通过self._applicator.node反查所属节点。为兼容旧签名Node.refresh 中保留了一段过渡代码先尝试self.style.layout(viewport)若捕获到 layout() missing 1 required positional argument 的TypeError再回退为旧的两参数调用。6. 移除fonts.font解析函数与Choices.default对应 issue #3129二者均未被 Toga 使用只影响 Travertino API 的直接使用者。当前 travertino/src/travertino/fonts.py 中确实只保留了Font类不再有模块级font()解析函数。文档与其他README 徽章更新为在 GitHub 上正常显示issue #170Misc 一节以编号列表汇总了 #88 至 #248 区间内的约 150 个配套任务依赖升级、CI 调整等维护性工作不改变 API 语义。0.3.02023-08-16最小布局尺寸追踪特性布局节点可以在当前实际布局尺寸之外额外追踪允许的最小布局尺寸issue #78。源码印证BaseBox._reset 初始化了min_content_width/min_content_height而 min_width / min_height 属性则按padding 最小内容 对侧留白的盒模型公式计算与普通width/height形成对称。此外travertino/src/travertino/size.py 中的at_least注释类a minimum bound配合 BaseIntrinsicSize 共同构成最小尺寸约束的表达工具Toga 核心在 Node.style setter 中为每个节点创建IntrinsicSize时即用到了这套结构。破坏性变更移除 Python 3.7 支持issue #80。0.2.02023-03-24特性Node新增clear方法以清空全部子节点issue #23实现见 Node.clear对叶节点是空操作否则将每个子节点的_parent置空并递归清理_root缓存新增绝对/相对字体尺寸常量issue #43即 constants.py 中的XX_SMALL…XXX_LARGE集合ABSOLUTE_FONT_SIZES以及LARGER/SMALLER集合RELATIVE_FONT_SIZES。Bug 修复修正了none作为属性值的处理issue #3。文档改进README 补充了 towncrier 与 pre-commit 的用法说明issue #18。0.1.x 系列2020 年及以前0.1.32020-05-25是 0.1 线的集大成版本引入了一批由 Pack 布局使用、但具有一般用途的常量issue #5支持对节点树进行子节点的添加、插入与移除issue #10对应 Node.add / insert / remove——三者都通过_set_root递归维护_root指针并在叶节点上抛出ValueError在rgba与hsla构造函数中加入颜色校验issue #17当前 Color 的静态方法parse支持命名色、#rgb/#rgba/#rrggbb/#rrggbbaa四种形式_validate_zero_to_one等辅助方法则负责对分量做 0–1 区间的夹取与类型校验支持声明系统默认字体尺寸issue #19即 SYSTEM_DEFAULT_FONT_SIZE -1Font.repr会将其渲染为 system default size测试 test_repr 覆盖了这一分支。0.1.2新增系统字体与消息字体常量SYSTEM / MESSAGE并为字体与颜色增加__hash__方法Font 侧实现见 Font.hash基于(FONT, family, size, style, variant, weight)元组测试 test_hash 验证了属性不同则哈希不同。0.1.1增加字体定义即Font类本体family/size/style/variant/weight 五元组含italic()、bold()、small_caps()等派生方法。0.1.0首次发布。版本时间线速查版本日期关键变更0.1.0—首次发布0.1.1—字体定义Font类0.1.2—SYSTEM/MESSAGE字体常量字体与颜色的__hash__0.1.32020-05-25Pack 通用常量节点树增删改rgba/hsla 颜色校验SYSTEM_DEFAULT_FONT_SIZE0.2.02023-03-24Node.clear绝对/相对字体尺寸常量none属性值修复0.3.02023-08-16最小布局尺寸追踪min_width/min_height移除 Python 3.70.5.02025-03-14并入 Toga 仓库同步发布dataclass 属性声明、\|/\|/in、list_property、START/ENDapplicator 机制重构、layout()定型、fonts.font移除现状与使用注意版本同步0.5.0 后 Travertino 不再独立发版升级 Toga 时 Travertino 会一并更新若项目仍需旧行为可参照 style.py 中的迁移提示将 Travertino 固定到 0.3.0对应 Toga 0.4.8 的旧 API。分配顺序敏感由于分配 applicator 即应用风格自定义 applicator 的第三方后端应确保节点尤其是_parent/_root在分配前已就绪否则将收到RuntimeWarning或RuntimeError。布局回调签名自 0.5.0 起layout()只接收viewport节点需通过self._applicator.node获取Node.refresh中的兼容分支仅为旧 Toga 保留不应在新代码中依赖旧签名。Python 环境当前仓库声明requires-python 3.11travertino/pyproject.toml与 0.5.0 发布时的 3.8 下限已不可同日而语引用本文结论时请注意区分发布时点与仓库当前状态。综上Travertino 的变更日志不仅是一份版本清单更勾勒出 Toga 风格系统从字典式属性袋到 dataclass 验证描述符 即时应用的架构演进路径0.1.x 打地基常量/字体/颜色/节点树0.2.x–0.3.0 补布局能力clear、最小尺寸0.5.0 则完成风格声明与应用的机制性重构。理解这些边界是安全升级或二次开发 Toga 风格层的前提。赞分享跨平台UI组件桌面应用【免费下载链接】togaA Python native, OS native GUI toolkit.项目地址https://gitcode.com/gh_mirrors/to/toga点击查看免费下载相关推荐Werkzeug 版本变更日志深度解读从 3.2.0 到 0.1 的关键演进与源码印证Werkzeug 版本变更日志深度解读从 3.2.0 到 0.1 的关键演进与源码印证 本文以仓库根目录的 CHANGES.rst https://link.后端Web框架Roundcube Webmail 版本演进全解析从 0.1 到 1.7 的变更日志深度导读Roundcube Webmail 版本演进全解析从 0.1 到 1.7 的变更日志深度导读 本篇技术指南以仓库根目录 CHANGELOG.md https:即时通讯后端前端Repowise 变更日志精读0.1 到 0.55.0 的 70 余个版本演进、升级信号与工程特征Repowise 变更日志精读0.1 到 0.55.0 的 70 余个版本演进、升级信号与工程特征 本文以 docs/CHANGELOG.md https:/上一篇3步解锁鼠标超能力Mac Mouse Fix让你的普通鼠标在macOS上超越苹果触控板下一篇3分钟快速上手免费下载B站大会员4K视频的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑