Skip to content

Commit 33d7cbc

Browse files
committed
Trigger update after iadd
1 parent 3dc1f18 commit 33d7cbc

File tree

2 files changed

+22
-15
lines changed

2 files changed

+22
-15
lines changed

examples/reactive.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ def changed(self, name, value):
2727
product1 = Product(name="Wrench", delivery=0)
2828
product2 = Product(name="Drill", count=6, price=500, service=False)
2929

30+
def increment_count(event):
31+
product1.count += 10
32+
3033
def order_hammers(event):
3134
product2.name = "Hammer"
3235
product2.count = 10
@@ -36,7 +39,6 @@ def order_hammers(event):
3639
product2.service = False
3740

3841
def create_form(name, product):
39-
print("Create form for", product)
4042
return ltk.VBox(
4143
ltk.Label(name),
4244
row(
@@ -86,7 +88,7 @@ def create():
8688
.css("padding", 12)
8789
.css("margin-bottom", 12)
8890
.css("font-size", 24),
89-
create_form("Product 1", product2)
91+
create_form("Product 2", product2)
9092
.css("border", "2px solid green")
9193
.css("padding", 12)
9294
.css("font-size", 24)
@@ -95,6 +97,10 @@ def create():
9597
.css("margin-top", 24)
9698
.css("border-radius", 8)
9799
.css("padding", 12),
100+
ltk.Button("Increment Product 1 count", increment_count)
101+
.css("margin-top", 24)
102+
.css("border-radius", 8)
103+
.css("padding", 12),
98104
)
99105
.attr("id", "reactive")
100106
.attr("name", "Reactive")

ltk/widgets.py

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -645,6 +645,7 @@ def set_value(self, value):
645645
self.model.changed(self.name, self.value)
646646
for listener in self.listeners:
647647
listener(self)
648+
return self.value
648649

649650
def __int__(self): return int(self.value) # pylint: disable=multiple-statements
650651
def __bool__(self): return bool(self.value) # pylint: disable=multiple-statements
@@ -685,19 +686,19 @@ def __rxor__(self, value): return value ^ self.value # pylint: disab
685686
def __rrshift__(self, value): return value >> self.value # pylint: disable=multiple-statements
686687
def __rlshift__(self, value): return value << self.value # pylint: disable=multiple-statements
687688

688-
def __iadd__(self, value): self.value += value # pylint: disable=multiple-statements
689-
def __isub__(self, value): self.value -= value # pylint: disable=multiple-statements
690-
def __imul__(self, value): self.value *= value # pylint: disable=multiple-statements
691-
def __itruediv__(self, value): self.value /= value # pylint: disable=multiple-statements
692-
def __imod__(self, value): self.value %= value # pylint: disable=multiple-statements
693-
def __ifloordiv__(self, value): self.value //= value # pylint: disable=multiple-statements
694-
def __ipow__(self, value): self.value **= value # pylint: disable=multiple-statements
695-
def __imatmul__(self, value): self.value @= value # pylint: disable=multiple-statements
696-
def __iand__(self, value): self.value &= value # pylint: disable=multiple-statements
697-
def __ior__(self, value): self.value |= value # pylint: disable=multiple-statements
698-
def __ixor__(self, value): self.value ^= value # pylint: disable=multiple-statements
699-
def __irshift__(self, value): self.value >>= value # pylint: disable=multiple-statements
700-
def __ilshift__(self, value): self.value <<= value # pylint: disable=multiple-statements
689+
def __iadd__(self, value): return self.set_value(self.value + value) # pylint: disable=multiple-statements
690+
def __isub__(self, value): return self.set_value(self.value - value) # pylint: disable=multiple-statements
691+
def __imul__(self, value): return self.set_value(self.value * value) # pylint: disable=multiple-statements
692+
def __itruediv__(self, value): return self.set_value(self.value / value) # pylint: disable=multiple-statements
693+
def __imod__(self, value): return self.set_value(self.value % value) # pylint: disable=multiple-statements
694+
def __ifloordiv__(self, value): return self.set_value(self.value // value) # pylint: disable=multiple-statements
695+
def __ipow__(self, value): return self.set_value(self.value ** value) # pylint: disable=multiple-statements
696+
def __imatmul__(self, value): return self.set_value(self.value @ value) # pylint: disable=multiple-statements
697+
def __iand__(self, value): return self.set_value(self.value & value) # pylint: disable=multiple-statements
698+
def __ior__(self, value): return self.set_value(self.value | value) # pylint: disable=multiple-statements
699+
def __ixor__(self, value): return self.set_value(self.value ^ value) # pylint: disable=multiple-statements
700+
def __irshift__(self, value): return self.set_value(self.value >> value) # pylint: disable=multiple-statements
701+
def __ilshift__(self, value): return self.set_value(self.value << value) # pylint: disable=multiple-statements
701702

702703
def __divmod__(self, value): return divmod(self.value, value) # pylint: disable=multiple-statements
703704
def __rdivmod__(self, value): return divmod(value, self.value) # pylint: disable=multiple-statements

0 commit comments

Comments
 (0)