qpuiq 0.20__tar.gz → 0.22__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of qpuiq might be problematic. Click here for more details.

Files changed (108) hide show
  1. {qpuiq-0.20 → qpuiq-0.22}/PKG-INFO +1 -1
  2. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/canvas.py +18 -19
  3. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/scroll.py +3 -1
  4. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/window.py +3 -3
  5. {qpuiq-0.20 → qpuiq-0.22}/PUI/__init__.py +1 -1
  6. {qpuiq-0.20 → qpuiq-0.22}/PUI/dom.py +2 -1
  7. {qpuiq-0.20 → qpuiq-0.22}/PUI/state.py +10 -0
  8. {qpuiq-0.20 → qpuiq-0.22}/QPUIQ.egg-info/PKG-INFO +1 -1
  9. {qpuiq-0.20 → qpuiq-0.22}/LICENSE.txt +0 -0
  10. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/__init__.py +0 -0
  11. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/application.py +0 -0
  12. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/base.py +0 -0
  13. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/button.py +0 -0
  14. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/checkbox.py +0 -0
  15. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/combobox.py +0 -0
  16. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/dialog.py +0 -0
  17. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/divider.py +0 -0
  18. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/image.py +0 -0
  19. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/label.py +0 -0
  20. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/layout.py +0 -0
  21. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/matplotlib.py +0 -0
  22. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/mdi.py +0 -0
  23. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/menu.py +0 -0
  24. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/modal.py +0 -0
  25. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/progressbar.py +0 -0
  26. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/radiobutton.py +0 -0
  27. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/splitter.py +0 -0
  28. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/tab.py +0 -0
  29. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/table.py +0 -0
  30. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/text.py +0 -0
  31. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/textfield.py +0 -0
  32. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/toolbar.py +0 -0
  33. {qpuiq-0.20 → qpuiq-0.22}/PUI/PySide6/tree.py +0 -0
  34. {qpuiq-0.20 → qpuiq-0.22}/PUI/common.py +0 -0
  35. {qpuiq-0.20 → qpuiq-0.22}/PUI/decorator.py +0 -0
  36. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/__init__.py +0 -0
  37. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/application.py +0 -0
  38. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/base.py +0 -0
  39. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/button.py +0 -0
  40. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/canvas.py +0 -0
  41. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/checkbox.py +0 -0
  42. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/divider.py +0 -0
  43. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/label.py +0 -0
  44. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/layout.py +0 -0
  45. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/progressbar.py +0 -0
  46. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/radiobutton.py +0 -0
  47. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/scroll.py +0 -0
  48. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/tab.py +0 -0
  49. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/text.py +0 -0
  50. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/textfield.py +0 -0
  51. {qpuiq-0.20 → qpuiq-0.22}/PUI/flet/window.py +0 -0
  52. {qpuiq-0.20 → qpuiq-0.22}/PUI/interfaces.py +0 -0
  53. {qpuiq-0.20 → qpuiq-0.22}/PUI/node.py +0 -0
  54. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/__init__.py +0 -0
  55. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/application.py +0 -0
  56. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/base.py +0 -0
  57. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/button.py +0 -0
  58. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/checkbox.py +0 -0
  59. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/label.py +0 -0
  60. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/layout.py +0 -0
  61. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/progressbar.py +0 -0
  62. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/radiobutton.py +0 -0
  63. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/scroll.py +0 -0
  64. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/tab.py +0 -0
  65. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/text.py +0 -0
  66. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/textfield.py +0 -0
  67. {qpuiq-0.20 → qpuiq-0.22}/PUI/textual/window.py +0 -0
  68. {qpuiq-0.20 → qpuiq-0.22}/PUI/timeline.py +0 -0
  69. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/__init__.py +0 -0
  70. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/application.py +0 -0
  71. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/base.py +0 -0
  72. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/button.py +0 -0
  73. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/canvas.py +0 -0
  74. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/checkbox.py +0 -0
  75. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/label.py +0 -0
  76. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/layout.py +0 -0
  77. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/progressbar.py +0 -0
  78. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/radiobutton.py +0 -0
  79. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/scroll.py +0 -0
  80. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/tab.py +0 -0
  81. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/text.py +0 -0
  82. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/textfield.py +0 -0
  83. {qpuiq-0.20 → qpuiq-0.22}/PUI/tkinter/window.py +0 -0
  84. {qpuiq-0.20 → qpuiq-0.22}/PUI/utils.py +0 -0
  85. {qpuiq-0.20 → qpuiq-0.22}/PUI/view.py +0 -0
  86. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/__init__.py +0 -0
  87. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/application.py +0 -0
  88. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/base.py +0 -0
  89. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/button.py +0 -0
  90. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/canvas.py +0 -0
  91. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/checkbox.py +0 -0
  92. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/combobox.py +0 -0
  93. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/dialog.py +0 -0
  94. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/divider.py +0 -0
  95. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/label.py +0 -0
  96. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/layout.py +0 -0
  97. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/progressbar.py +0 -0
  98. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/radiobutton.py +0 -0
  99. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/scroll.py +0 -0
  100. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/text.py +0 -0
  101. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/textfield.py +0 -0
  102. {qpuiq-0.20 → qpuiq-0.22}/PUI/wx/window.py +0 -0
  103. {qpuiq-0.20 → qpuiq-0.22}/QPUIQ.egg-info/SOURCES.txt +0 -0
  104. {qpuiq-0.20 → qpuiq-0.22}/QPUIQ.egg-info/dependency_links.txt +0 -0
  105. {qpuiq-0.20 → qpuiq-0.22}/QPUIQ.egg-info/top_level.txt +0 -0
  106. {qpuiq-0.20 → qpuiq-0.22}/README.md +0 -0
  107. {qpuiq-0.20 → qpuiq-0.22}/setup.cfg +0 -0
  108. {qpuiq-0.20 → qpuiq-0.22}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qpuiq
3
- Version: 0.20
3
+ Version: 0.22
4
4
  Summary: "PUI" Python Declarative UI Framework
5
5
  Home-page: https://github.com/buganini/PUI
6
6
  Author: Buganini Chiu
@@ -6,7 +6,7 @@ from PySide6.QtGui import QPainter, QColor, QPainterPath, QImage
6
6
 
7
7
  class PUIQtCanvas(QtWidgets.QWidget):
8
8
  def __init__(self, node, width=None, height=None):
9
- self.node = node
9
+ self.puinode = node
10
10
  self.width = width
11
11
  self.height = height
12
12
  super().__init__()
@@ -18,25 +18,25 @@ class PUIQtCanvas(QtWidgets.QWidget):
18
18
  e = PUIEvent()
19
19
  e.button = event.button().value
20
20
  e.x, e.y = event.position().toPoint().toTuple()
21
- self.node._dblclicked(e)
21
+ self.puinode._dblclicked(e)
22
22
 
23
23
  def mousePressEvent(self, event):
24
24
  e = PUIEvent()
25
25
  e.button = event.button().value
26
26
  e.x, e.y = event.position().toPoint().toTuple()
27
- self.node._mousedown(e)
27
+ self.puinode._mousedown(e)
28
28
 
29
29
  def mouseReleaseEvent(self, event):
30
30
  e = PUIEvent()
31
31
  e.button = event.button().value
32
32
  e.x, e.y = event.position().toPoint().toTuple()
33
- self.node._mouseup(e)
33
+ self.puinode._mouseup(e)
34
34
 
35
35
  def mouseMoveEvent(self, event):
36
36
  e = PUIEvent()
37
37
  e.button = event.button().value
38
38
  e.x, e.y = event.position().toPoint().toTuple()
39
- self.node._mousemove(e)
39
+ self.puinode._mousemove(e)
40
40
 
41
41
  def wheelEvent(self, event):
42
42
  e = PUIEvent()
@@ -56,26 +56,26 @@ class PUIQtCanvas(QtWidgets.QWidget):
56
56
  if emodifiers & QtCore.Qt.MetaModifier:
57
57
  modifier |= KeyModifier.META
58
58
  e.modifiers = modifier
59
- self.node._wheel(e)
59
+ self.puinode._wheel(e)
60
60
 
61
61
  def paintEvent(self, event):
62
- node = self.node.get_node()
63
- node.qpainter = QPainter()
64
- node.qpainter.begin(self)
65
- node.qpainter.setRenderHints(QtGui.QPainter.Antialiasing, True)
62
+ puinode = self.puinode.get_node()
63
+ puinode.qpainter = QPainter()
64
+ puinode.qpainter.begin(self)
65
+ puinode.qpainter.setRenderHints(QtGui.QPainter.Antialiasing, True)
66
66
 
67
- if not node.style_bgcolor is None:
67
+ if not puinode.style_bgcolor is None:
68
68
  bgBrush = QtGui.QBrush()
69
- bgBrush.setColor(QtGui.QColor(node.style_bgcolor))
69
+ bgBrush.setColor(QtGui.QColor(puinode.style_bgcolor))
70
70
  bgBrush.setStyle(QtCore.Qt.SolidPattern)
71
71
  rect = QtCore.QRect(0, 0, self.width or self.geometry().width(), self.height or self.geometry().height())
72
- node.qpainter.fillRect(rect, bgBrush)
72
+ puinode.qpainter.fillRect(rect, bgBrush)
73
73
 
74
- node.width = self.geometry().width()
75
- node.height = self.geometry().height()
76
- immediate = node.painter(node, *node.args)
77
- node.qpainter.end()
78
- node.qpainter = None
74
+ puinode.width = self.geometry().width()
75
+ puinode.height = self.geometry().height()
76
+ immediate = puinode.painter(puinode, *puinode.args)
77
+ puinode.qpainter.end()
78
+ puinode.qpainter = None
79
79
  if immediate:
80
80
  self.update()
81
81
 
@@ -114,7 +114,6 @@ class Canvas(QtBaseWidget):
114
114
  self.ui.height = self.layout_height or 0
115
115
  else:
116
116
  self.ui = PUIQtCanvas(self, self.layout_width or 0, self.layout_height or 0)
117
- self.ui.node = self
118
117
  self.ui.setMouseTracking(bool(self._onMouseMove))
119
118
  self.ui.update()
120
119
  super().update(prev)
@@ -75,7 +75,6 @@ class Scroll(QtBaseWidget):
75
75
  if node.destroyed:
76
76
  return
77
77
  node.children[0].outer.origResizeEvent(event)
78
- node.children[0].outer.resizeEvent = self.onUiResized
79
78
  if node.horizontal is False:
80
79
  if isinstance(node.children[0], QtBaseLayout):
81
80
  node.outer.setMinimumWidth(node.children[0].outer.sizeHint().width())
@@ -88,6 +87,9 @@ class Scroll(QtBaseWidget):
88
87
  elif isinstance(node.children[0], QtBaseWidget):
89
88
  node.outer.setMinimumHeight(node.children[0].outer.sizeHint().height())
90
89
 
90
+ def postSync(self):
91
+ self.children[0].outer.resizeEvent = self.onUiResized
92
+
91
93
  def scrollX(self, pos=0):
92
94
  if math.copysign(1, pos) >= 0:
93
95
  self.align_x = 0
@@ -9,7 +9,7 @@ class QMainWindow(QtWidgets.QMainWindow):
9
9
  def keyPressEvent(self, event):
10
10
  e = PUIEvent()
11
11
  e.text = event.text()
12
- self.node._keypress(e)
12
+ self.puinode._keypress(e)
13
13
 
14
14
  def mousePressEvent(self, event):
15
15
  focused_widget = QtWidgets.QApplication.focusWidget()
@@ -34,13 +34,13 @@ class Window(QtBaseWidget):
34
34
  def update(self, prev=None):
35
35
  if prev and prev.ui:
36
36
  self.ui = prev.ui
37
- self.ui.node = self
37
+ self.ui.puinode = self
38
38
  self.curr_size = prev.curr_size
39
39
  self.curr_maximize = prev.curr_maximize
40
40
  self.curr_fullscreen = prev.curr_fullscreen
41
41
  else:
42
42
  self.ui = QMainWindow()
43
- self.ui.node = self
43
+ self.ui.puinode = self
44
44
  self.ui.show()
45
45
  self.curr_size = Prop()
46
46
  self.curr_maximize = Prop()
@@ -1,4 +1,4 @@
1
- __version__ = "0.20"
1
+ __version__ = "0.22"
2
2
 
3
3
  from .node import *
4
4
  from .view import *
@@ -237,7 +237,8 @@ def sync(node, dom_parent, dom_offset, oldVDOM, newVDOM, depth=0):
237
237
  print(f"{(depth+1)*' '}S4. TRIM", f"dom_offset={dom_offset}", len(oldVDOM), "=>", len(newVDOM))
238
238
  while len(oldVDOM) > nl:
239
239
  old = oldVDOM.pop(nl)
240
- print(f"{(depth+2)*' '}", f"key={old.key} virtual={old.pui_virtual} children={len(old.children)}")
240
+ if DEBUG:
241
+ print(f"{(depth+2)*' '}", f"key={old.key} virtual={old.pui_virtual} children={len(old.children)}")
241
242
  oldVMap.pop(nl)
242
243
  nodes = dom_remove_node(dom_parent, dom_offset + nl, old)
243
244
  dom_children_num -= len([n for n in nodes if not n.pui_virtual and not n.pui_outoforder])
@@ -199,6 +199,9 @@ class StateObject(BaseState):
199
199
  if ex_type is None: # don't consume exception
200
200
  return self
201
201
 
202
+ def __eq__(self, other):
203
+ return self.__values == other
204
+
202
205
  # getter
203
206
  def __getattr__(self, key):
204
207
  if not key.startswith("_"):
@@ -278,6 +281,9 @@ class StateList(BaseState):
278
281
  if ex_type is None: # don't consume exception
279
282
  return self
280
283
 
284
+ def __eq__(self, other):
285
+ return self.__values == other
286
+
281
287
  # getter
282
288
  def __getitem__(self, key):
283
289
  try:
@@ -295,6 +301,7 @@ class StateList(BaseState):
295
301
  elif isinstance(ret, StateDict):
296
302
  ret._StateDict__listeners.add(view)
297
303
  return ret
304
+
298
305
  # setter
299
306
  def __setitem__(self, key, value):
300
307
  try:
@@ -520,6 +527,9 @@ class StateDict(BaseState):
520
527
  if ex_type is None: # don't consume exception
521
528
  return self
522
529
 
530
+ def __eq__(self, other):
531
+ return self.__values == other
532
+
523
533
  # setter
524
534
  def __delitem__(self, key):
525
535
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qpuiq
3
- Version: 0.20
3
+ Version: 0.22
4
4
  Summary: "PUI" Python Declarative UI Framework
5
5
  Home-page: https://github.com/buganini/PUI
6
6
  Author: Buganini Chiu
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes