如何同步更新引用同一值的多个字典键?PyQt6样式管理需求
PyQt6样式表统一管理与自动同步问题
问题场景
我在用PyQt6开发GUI程序,通过QStyleSheet设置样式,但样式表已有数百行且冗余度极高,因此想编写一个类来统一管理样式。
我的思路是:用字典存储若干样式模板字符串,类实例保存样式属性值,通过字符串格式化将实例的属性值填充到模板中生成最终样式表。但目前遇到核心问题:修改某个属性值时,所有引用该值的控件样式无法自动同步更新。比如大量控件使用同一文本颜色,我希望仅修改一处颜色值,所有引用该值的地方就自动同步更新。
举个简单的测试代码:
class Dummy: def __init__(self): self._color = '#4000ff' @property def color(self): return self._color dum = Dummy() config = {'QLabel': {'color': dum.color}, 'QCheckBox': {'color': dum.color}} dum._color = '#ff00ff'
执行后实际结果:
In [115]: dum._color = '#ff00ff' In [116]: config Out[116]: {'QLabel': {'color': '#4000ff'}, 'QCheckBox': {'color': '#4000ff'}}
而我预期的结果应该是:
{'QLabel': {'color': '#ff00ff'}, 'QCheckBox': {'color': '#ff00ff'}}
逐个修改每个引用的方式过于繁琐,想了解有哪些方法能实现「修改一处值,所有引用自动更新」的效果。
核心诉求
本质上是想要类似C指针的功能,以下是仅作逻辑说明的C示例(无main函数,无法编译):
#include <unordered_map> #include <string> using std::unordered_map; using std::string; string color = "#4000ff"; unordered_map<string, unordered_map<string, string>> config = { {"QLabel", { {"Color", color} }}, {"QCheckBox", { {"Color", color} }} } string *colorp = &color; *colorp = "#ff00ff"
另外,我有大量样式属性是通过字典传入类构造函数的,动态添加属性会增加不必要的复杂度,现有方案无法解决我的问题。以下是更贴近实际场景的示例:
style = """ QComboBox {{ border: 2px {borderstyle} {bordercolor}; border-radius: 8px; background: {background}; color: {color}; selection-background-color: {alternate_background}; selection-color: {highlight}; }} """ values = { 'borderstyle': 'outset', 'bordercolor': '#552b80', 'background': '#422e80', 'color': '#c000ff', 'alternate_background': '#7800d7', 'highlight': '#ffb2ff' } style.format_map(values)
我需要为多个控件实现这种统一更新的功能,且值是通过字典传递的,无法仅在字典中存储对象并查询其属性。
内容的提问来源于stack exchange,提问作者Ξένη Γήινος
相关产品推荐
相关产品推荐

