qpuiq 0.19__tar.gz → 0.21__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.
- {qpuiq-0.19/qpuiq.egg-info → qpuiq-0.21}/PKG-INFO +2 -9
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/canvas.py +18 -18
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/scroll.py +3 -1
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/window.py +3 -3
- {qpuiq-0.19 → qpuiq-0.21}/PUI/__init__.py +1 -1
- {qpuiq-0.19 → qpuiq-0.21}/PUI/state.py +2 -2
- {qpuiq-0.19 → qpuiq-0.21/QPUIQ.egg-info}/PKG-INFO +2 -9
- {qpuiq-0.19/qpuiq.egg-info → qpuiq-0.21/QPUIQ.egg-info}/SOURCES.txt +4 -0
- {qpuiq-0.19 → qpuiq-0.21}/LICENSE.txt +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/__init__.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/application.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/base.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/button.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/checkbox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/combobox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/dialog.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/divider.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/image.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/label.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/layout.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/matplotlib.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/mdi.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/menu.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/modal.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/progressbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/radiobutton.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/splitter.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/tab.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/table.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/text.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/textfield.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/toolbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/PySide6/tree.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/common.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/decorator.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/dom.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/__init__.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/application.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/base.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/button.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/canvas.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/checkbox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/divider.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/label.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/layout.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/progressbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/radiobutton.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/scroll.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/tab.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/text.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/textfield.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/flet/window.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/interfaces.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/node.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/__init__.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/application.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/base.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/button.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/checkbox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/label.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/layout.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/progressbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/radiobutton.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/scroll.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/tab.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/text.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/textfield.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/textual/window.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/timeline.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/__init__.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/application.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/base.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/button.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/canvas.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/checkbox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/label.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/layout.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/progressbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/radiobutton.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/scroll.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/tab.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/text.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/textfield.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/tkinter/window.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/utils.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/view.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/__init__.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/application.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/base.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/button.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/canvas.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/checkbox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/combobox.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/dialog.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/divider.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/label.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/layout.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/progressbar.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/radiobutton.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/scroll.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/text.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/textfield.py +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/PUI/wx/window.py +0 -0
- {qpuiq-0.19/qpuiq.egg-info → qpuiq-0.21/QPUIQ.egg-info}/dependency_links.txt +0 -0
- {qpuiq-0.19/qpuiq.egg-info → qpuiq-0.21/QPUIQ.egg-info}/top_level.txt +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/README.md +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/setup.cfg +0 -0
- {qpuiq-0.19 → qpuiq-0.21}/setup.py +0 -0
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: qpuiq
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21
|
|
4
4
|
Summary: "PUI" Python Declarative UI Framework
|
|
5
5
|
Home-page: https://github.com/buganini/PUI
|
|
6
6
|
Author: Buganini Chiu
|
|
7
7
|
Author-email: buganini@b612.tw
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE.txt
|
|
10
|
-
Dynamic: author
|
|
11
|
-
Dynamic: author-email
|
|
12
|
-
Dynamic: description
|
|
13
|
-
Dynamic: description-content-type
|
|
14
|
-
Dynamic: home-page
|
|
15
|
-
Dynamic: license-file
|
|
16
|
-
Dynamic: summary
|
|
17
10
|
|
|
18
11
|
# What is PUI
|
|
19
12
|
PUI is a reactive/declarative UI framework with two-way data binding.
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
59
|
+
self.puinode._wheel(e)
|
|
60
60
|
|
|
61
61
|
def paintEvent(self, event):
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
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
|
|
67
|
+
if not puinode.style_bgcolor is None:
|
|
68
68
|
bgBrush = QtGui.QBrush()
|
|
69
|
-
bgBrush.setColor(QtGui.QColor(
|
|
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
|
-
|
|
72
|
+
puinode.qpainter.fillRect(rect, bgBrush)
|
|
73
73
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
immediate =
|
|
77
|
-
|
|
78
|
-
|
|
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
|
|
|
@@ -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.
|
|
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.
|
|
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.
|
|
43
|
+
self.ui.puinode = self
|
|
44
44
|
self.ui.show()
|
|
45
45
|
self.curr_size = Prop()
|
|
46
46
|
self.curr_maximize = Prop()
|
|
@@ -230,9 +230,9 @@ class StateObject(BaseState):
|
|
|
230
230
|
if self.__binders.get(key):
|
|
231
231
|
self.__binders[key][1](value)
|
|
232
232
|
|
|
233
|
-
if
|
|
233
|
+
if isinstance(value, list):
|
|
234
234
|
value = StateList(value)
|
|
235
|
-
elif
|
|
235
|
+
elif isinstance(value, dict):
|
|
236
236
|
value = StateDict(value)
|
|
237
237
|
if not hasattr(self.__values, key) or getattr(self.__values, key) != value:
|
|
238
238
|
setattr(self.__values, key, value)
|
|
@@ -1,19 +1,12 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
2
|
Name: qpuiq
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.21
|
|
4
4
|
Summary: "PUI" Python Declarative UI Framework
|
|
5
5
|
Home-page: https://github.com/buganini/PUI
|
|
6
6
|
Author: Buganini Chiu
|
|
7
7
|
Author-email: buganini@b612.tw
|
|
8
8
|
Description-Content-Type: text/markdown
|
|
9
9
|
License-File: LICENSE.txt
|
|
10
|
-
Dynamic: author
|
|
11
|
-
Dynamic: author-email
|
|
12
|
-
Dynamic: description
|
|
13
|
-
Dynamic: description-content-type
|
|
14
|
-
Dynamic: home-page
|
|
15
|
-
Dynamic: license-file
|
|
16
|
-
Dynamic: summary
|
|
17
10
|
|
|
18
11
|
# What is PUI
|
|
19
12
|
PUI is a reactive/declarative UI framework with two-way data binding.
|
|
@@ -100,6 +100,10 @@ PUI/wx/scroll.py
|
|
|
100
100
|
PUI/wx/text.py
|
|
101
101
|
PUI/wx/textfield.py
|
|
102
102
|
PUI/wx/window.py
|
|
103
|
+
QPUIQ.egg-info/PKG-INFO
|
|
104
|
+
QPUIQ.egg-info/SOURCES.txt
|
|
105
|
+
QPUIQ.egg-info/dependency_links.txt
|
|
106
|
+
QPUIQ.egg-info/top_level.txt
|
|
103
107
|
qpuiq.egg-info/PKG-INFO
|
|
104
108
|
qpuiq.egg-info/SOURCES.txt
|
|
105
109
|
qpuiq.egg-info/dependency_links.txt
|
|
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
|
|
File without changes
|