MCPcopy
hub / github.com/PyQt5/PyQt / QPropertyMapper

Class QPropertyMapper

Demo/Lib/qpropmapper.py:59–314  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

57
58
59class QPropertyMapper(QObject):
60 Verbose = False
61 propertyChanged = Signal(int, str, object)
62 Signal = (
63 "dateTimeChanged",
64 "currentTextChanged",
65 "valueChanged",
66 "toggled",
67 "textChanged",
68 )
69 Props = (
70 "dateTime",
71 "html",
72 "plainText",
73 "currentText",
74 "checked",
75 "value",
76 "text",
77 )
78
79 def __init__(self, *args, **kwargs):
80 data = kwargs.pop("data", {})
81 super().__init__(*args, **kwargs)
82 self._widgetKey = {}
83 self._keyWidget = {}
84 self.propertyChanged.connect(self.onPropertyChanged)
85 self.loadData(data, clear=False)
86
87 def __enter__(self):
88 self.__log("[__enter__]: block signals")
89 self.blockSignals(True)
90 return self
91
92 def __exit__(self, exc_type, exc_val, exc_tb):
93 self.__log("[__exit__]: unblock signals")
94 self.blockSignals(False)
95
96 def event(self, ev) -> bool:
97 if ev.type() == ev.DynamicPropertyChange:
98 name = bytes(ev.propertyName()).decode()
99 value = self.property(name)
100 self.propertyChanged.emit(value is not None, name, value)
101 return super().event(ev)
102
103 def clear(self):
104 self.__log("[clear]: clear datas")
105 with self:
106 keys = self.dynamicPropertyNames().copy()
107 for key in keys:
108 self.setProperty(bytes(key).decode(), None)
109 # clear binds
110
111 def loadData(self, data: dict, clear: bool = False):
112 self.__log("[loadData]: load data")
113 if clear:
114 self.clear()
115 data = DictBox(data, default_box=True, box_dots=True)
116 for key, value in data.items(True):

Callers 1

__init__Method · 0.90

Calls

no outgoing calls

Tested by 1

__init__Method · 0.72