qpuiq 0.11__py3-none-any.whl → 0.13__py3-none-any.whl

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.

PUI/PySide6/base.py CHANGED
@@ -72,6 +72,19 @@ class QtPUIView(PUIView):
72
72
  self.qt_params[k] = v
73
73
  return self
74
74
 
75
+ class EventFilter(QtCore.QObject):
76
+ def __init__(self):
77
+ super().__init__()
78
+ self.node = None
79
+
80
+ def eventFilter(self, obj, event):
81
+ node = self.node.get_node()
82
+ if event.type() == QtCore.QEvent.DragEnter:
83
+ return node.handleDragEnterEvent(event)
84
+ elif event.type() == QtCore.QEvent.Drop:
85
+ return node.handleDropEvent(event)
86
+ return super().eventFilter(obj, event)
87
+
75
88
  class QtBaseWidget(PUINode):
76
89
  pui_terminal = True
77
90
 
@@ -89,6 +102,12 @@ class QtBaseWidget(PUINode):
89
102
  def update(self, prev=None):
90
103
  super().update(prev)
91
104
 
105
+ if prev:
106
+ self.eventFilter = prev.eventFilter
107
+ else:
108
+ self.eventFilter = EventFilter()
109
+ self.eventFilter.node = self
110
+
92
111
  sizePolicy = self.ui.sizePolicy()
93
112
  if self.layout_width is not None:
94
113
  sizePolicy.setHorizontalPolicy(QtWidgets.QSizePolicy.Preferred)
@@ -102,6 +121,29 @@ class QtBaseWidget(PUINode):
102
121
 
103
122
  _apply_params(self.ui, self)
104
123
 
124
+ def postUpdate(self):
125
+ if self.ui:
126
+ if self._onDropped:
127
+ self.ui.setAcceptDrops(True)
128
+ self.ui.installEventFilter(self.eventFilter)
129
+ else:
130
+ self.ui.setAcceptDrops(False)
131
+ super().postUpdate()
132
+
133
+ def handleDragEnterEvent(self, event):
134
+ if self._onDragEntered:
135
+ self._onDragEntered[0](event, *self._onDragEntered[1], **self._onDragEntered[2])
136
+ else:
137
+ event.setDropAction(QtCore.Qt.CopyAction)
138
+ event.accept()
139
+
140
+ def handleDropEvent(self, event):
141
+ if self._onDropped:
142
+ self._onDropped[0](event, *self._onDropped[1], **self._onDropped[2])
143
+ else:
144
+ print("Dropped", event)
145
+ event.ignore()
146
+
105
147
  def qtSizeHint(self):
106
148
  node = self.get_node()
107
149
  if not node.ui:
PUI/PySide6/table.py CHANGED
@@ -49,8 +49,45 @@ class QtTableModelAdapter(QtCore.QAbstractTableModel):
49
49
  return self.model.columnCount()
50
50
 
51
51
 
52
+ class QtTableNodeModelAdapter(QtCore.QAbstractTableModel):
53
+ def __init__(self, children):
54
+ super().__init__()
55
+ self.children = children
56
+
57
+ def data(self, index, role):
58
+ if role == QtCore.Qt.DisplayRole:
59
+ data = self.children[index.row()].children[index.column()].data
60
+ if isinstance(data, BaseBinding):
61
+ return str(data.value)
62
+ return data
63
+ return None
64
+
65
+ def setData(self, index, value, role):
66
+ if role == QtCore.Qt.EditRole:
67
+ n = self.children[index.row()].children[index.column()]
68
+ if isinstance(n.data, BaseBinding):
69
+ n.data.value = value
70
+ else:
71
+ n._set(value)
72
+ return True
73
+
74
+ def flags(self, index):
75
+ flags = super().flags(index)
76
+ n = self.children[index.row()].children[index.column()]
77
+ if isinstance(n.data, BaseBinding) or n._set_callback:
78
+ flags |= QtCore.Qt.ItemIsEditable
79
+ return flags
80
+
81
+ def rowCount(self, index):
82
+ return len(self.children)
83
+
84
+ def columnCount(self, index):
85
+ if self.children:
86
+ return len(self.children[0].children)
87
+ return 0
88
+
52
89
  class Table(QtBaseWidget):
53
- def __init__(self, model, autofit=True):
90
+ def __init__(self, model=None, autofit=True):
54
91
  super().__init__()
55
92
  self.layout_weight = 1
56
93
  self.model = model
@@ -67,23 +104,44 @@ class Table(QtBaseWidget):
67
104
  self.curr_model = Prop()
68
105
  self.ui = QtWidgets.QTableView()
69
106
 
70
- if self.model.columnHeader is None:
71
- self.ui.horizontalHeader().hide()
72
- else:
73
- self.ui.horizontalHeader().show()
107
+ if self.model:
108
+ if self.model.columnHeader is None:
109
+ self.ui.horizontalHeader().hide()
110
+ else:
111
+ self.ui.horizontalHeader().show()
74
112
 
75
- if self.model.rowHeader is None:
76
- self.ui.verticalHeader().hide()
77
- else:
78
- self.ui.verticalHeader().show()
113
+ if self.model.rowHeader is None:
114
+ self.ui.verticalHeader().hide()
115
+ else:
116
+ self.ui.verticalHeader().show()
79
117
 
80
- if self.curr_model.set(self.model):
81
- self.qt_model = QtTableModelAdapter(self.model)
82
- self.ui.setModel(self.qt_model)
118
+ if self.curr_model.set(self.model):
119
+ self.qt_model = QtTableModelAdapter(self.model)
120
+ self.ui.setModel(self.qt_model)
121
+ else:
122
+ self.qt_model.refresh()
83
123
  else:
84
- self.qt_model.refresh()
124
+ self.ui.horizontalHeader().hide()
125
+ self.ui.verticalHeader().hide()
126
+ self.qt_model = QtTableNodeModelAdapter(self.children)
127
+ self.ui.setModel(self.qt_model)
85
128
 
86
129
  if self.autofit:
87
130
  self.ui.resizeColumnsToContents()
88
131
 
89
132
  super().update(prev)
133
+
134
+ class TableNode(PUINode):
135
+ def __init__(self, data=""):
136
+ super().__init__()
137
+ self._set_callback = None
138
+ self.data = data
139
+
140
+ def set(self, cb, *args, **kwargs):
141
+ self._set_callback = (cb, args, kwargs)
142
+ return self
143
+
144
+ def _set(self, data):
145
+ if self._set_callback:
146
+ cb, args, kwargs = self._set_callback
147
+ cb(data, *args, **kwargs)
PUI/PySide6/tree.py CHANGED
@@ -6,6 +6,7 @@ class QAbstractItemModelAdapter(QtCore.QAbstractItemModel):
6
6
  def __init__(self, model: "BaseTreeAdapter"):
7
7
  super().__init__()
8
8
  self.model = model
9
+ self.node = None
9
10
 
10
11
  def index(self, row, column, parent = QtCore.QModelIndex()):
11
12
  parent_node = parent.internalPointer() if parent.isValid() else None
@@ -14,6 +15,27 @@ class QAbstractItemModelAdapter(QtCore.QAbstractItemModel):
14
15
  return self.createIndex(row, column, child)
15
16
  return QtCore.QModelIndex()
16
17
 
18
+ def flags(self, index):
19
+ if not index.isValid():
20
+ return QtCore.Qt.ItemIsDropEnabled
21
+
22
+ defaultFlags = super().flags(index)
23
+
24
+ return defaultFlags | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled
25
+
26
+ def canDropMimeData(self, data, action, row, column, parent):
27
+ if parent.isValid():
28
+ pass
29
+ else:
30
+ return bool(self.node._onDropped)
31
+
32
+ def dropMimeData(self, data, action, row, column, parent):
33
+ if parent.isValid():
34
+ pass
35
+ else:
36
+ event = QtGui.QDropEvent(QtCore.QPoint(0,0), action, data, QtCore.Qt.MouseButton.LeftButton, QtCore.Qt.KeyboardModifier.NoModifier, QtCore.QEvent.Drop)
37
+ self.node._onDropped[0](event, *self.node._onDropped[1], **self.node._onDropped[2])
38
+
17
39
  def parent(self, index):
18
40
  if not index.isValid():
19
41
  return QModelIndex()
@@ -42,14 +64,103 @@ class QAbstractItemModelAdapter(QtCore.QAbstractItemModel):
42
64
  parent_node = parent.internalPointer() if parent.isValid() else None
43
65
  return self.model.rowCount(parent_node) > 0
44
66
 
67
+ def clicked(self, node):
68
+ self.model.clicked(node)
69
+
70
+ def dblclicked(self, node):
71
+ self.model.dblclicked(node)
72
+
73
+ def expanded(self, node):
74
+ self.model.expanded(node)
75
+
76
+ def collapsed(self, node):
77
+ self.model.collapsed(node)
78
+
79
+ class QTreeNodeModelAdapter(QtCore.QAbstractItemModel):
80
+ def __init__(self, rootnode):
81
+ super().__init__()
82
+ self.node = None
83
+ self.rootnode = rootnode
84
+
85
+ def index(self, row, column, parent = QtCore.QModelIndex()):
86
+ parent_node = parent.internalPointer() if parent.isValid() else self.rootnode
87
+ if 0 <= row and row < len(parent_node.children):
88
+ child = parent_node.children[row]
89
+ return self.createIndex(row, column, child)
90
+ return QtCore.QModelIndex()
91
+
92
+ def flags(self, index):
93
+ if not index.isValid():
94
+ return QtCore.Qt.ItemIsDropEnabled
95
+
96
+ defaultFlags = super().flags(index)
97
+
98
+ return defaultFlags | QtCore.Qt.ItemIsDragEnabled | QtCore.Qt.ItemIsDropEnabled
99
+
100
+ def canDropMimeData(self, data, action, row, column, parent):
101
+ if parent.isValid():
102
+ pass
103
+ else:
104
+ return bool(self.node._onDropped)
105
+
106
+ def dropMimeData(self, data, action, row, column, parent):
107
+ if parent.isValid():
108
+ pass
109
+ else:
110
+ event = QtGui.QDropEvent(QtCore.QPoint(0,0), action, data, QtCore.Qt.MouseButton.LeftButton, QtCore.Qt.KeyboardModifier.NoModifier, QtCore.QEvent.Drop)
111
+ self.node._onDropped[0](event, *self.node._onDropped[1], **self.node._onDropped[2])
112
+
113
+ def parent(self, index):
114
+ if not index.isValid():
115
+ return QModelIndex()
116
+ node = index.internalPointer()
117
+ parent_node = node.parent
118
+ if not isinstance(parent_node, TreeNode):
119
+ parent_node = None
120
+ if parent_node:
121
+ return self.createIndex(0, 0, parent_node)
122
+ return QModelIndex()
123
+
124
+ def data(self, index, role):
125
+ if not index.isValid():
126
+ return None
127
+ node = index.internalPointer()
128
+ if role == QtCore.Qt.DisplayRole:
129
+ return node.data
130
+ return None
131
+
132
+ def rowCount(self, parent):
133
+ parent_node = parent.internalPointer() if parent.isValid() else self.rootnode
134
+ return len(parent_node.children)
135
+
136
+ def columnCount(self, parent):
137
+ return 1
138
+
139
+ def hasChildren(self, parent):
140
+ parent_node = parent.internalPointer() if parent.isValid() else self.rootnode
141
+ return len(parent_node.children) > 0
142
+
143
+ def clicked(self, node):
144
+ node._clicked(None)
145
+
146
+ def dblclicked(self, node):
147
+ node._dblclicked(None)
148
+
149
+ def expanded(self, node):
150
+ node._expanded()
151
+
152
+ def collapsed(self, node):
153
+ node._collapsed()
45
154
 
46
155
  class Tree(QtBaseWidget):
47
- def __init__(self, model):
156
+ def __init__(self, model=None):
48
157
  super().__init__()
49
158
  self.layout_weight = 1
50
159
  self.model = model
51
160
  self.curr_model = None
52
161
  self.pendings = []
162
+ self._expand_callback = None
163
+ self._collapse_callback = None
53
164
 
54
165
  def update(self, prev):
55
166
  if prev and prev.ui:
@@ -66,11 +177,20 @@ class Tree(QtBaseWidget):
66
177
  self.ui.expanded.connect(self.on_item_expanded)
67
178
  self.ui.collapsed.connect(self.on_item_collapsed)
68
179
 
69
- if self.curr_model.set(self.model):
70
- self.qt_model = QAbstractItemModelAdapter(self.model)
71
- self.ui.setModel(self.qt_model)
180
+ if self.model:
181
+ if self.curr_model.set(self.model):
182
+ self.qt_model = QAbstractItemModelAdapter(self.model)
183
+ self.qt_model.node = self
184
+ self.ui.setModel(self.qt_model)
185
+ else:
186
+ self.qt_model.modelReset.emit()
72
187
  else:
73
- self.qt_model.modelReset.emit()
188
+ if not self.qt_model:
189
+ self.qt_model = QTreeNodeModelAdapter(self)
190
+ self.qt_model.node = self
191
+ self.ui.setModel(self.qt_model)
192
+ else:
193
+ self.qt_model.modelReset.emit()
74
194
 
75
195
  for pending in self.pendings:
76
196
  pending[0](*pending[1:])
@@ -99,22 +219,62 @@ class Tree(QtBaseWidget):
99
219
  self.pendings.append([self.expandable, enabled])
100
220
  return self
101
221
 
222
+ def expand(self, cb, *args, **kwargs):
223
+ self._expand_callback = (cb, args, kwargs)
224
+ return self
225
+
226
+ def _expanded(self):
227
+ if self._expand_callback:
228
+ cb, args, kwargs = self._expand_callback
229
+ cb(*args, **kwargs)
230
+
231
+ def collapse(self, cb, *args, **kwargs):
232
+ self._collapse_callback = (cb, args, kwargs)
233
+ return self
234
+
235
+ def _collapsed(self):
236
+ if self._collapse_callback:
237
+ cb, args, kwargs = self._collapse_callback
238
+ cb(*args, **kwargs)
239
+
102
240
  def on_item_clicked(self, index):
103
- node = self.get_node()
104
241
  treenode = index.internalPointer()
105
- node.model.clicked(treenode)
242
+ self.qt_model.clicked(treenode)
106
243
 
107
244
  def on_item_double_clicked(self, index):
108
- node = self.get_node()
109
245
  treenode = index.internalPointer()
110
- node.model.dblclicked(treenode)
246
+ self.qt_model.dblclicked(treenode)
111
247
 
112
248
  def on_item_expanded(self, index):
113
- node = self.get_node()
114
249
  treenode = index.internalPointer()
115
- node.model.expanded(treenode)
250
+ self.qt_model.expanded(treenode)
116
251
 
117
252
  def on_item_collapsed(self, index):
118
- node = self.get_node()
119
253
  treenode = index.internalPointer()
120
- node.model.collapsed(treenode)
254
+ self.qt_model.collapsed(treenode)
255
+
256
+ class TreeNode(PUINode):
257
+ def __init__(self, data=""):
258
+ super().__init__()
259
+ self._set_callback = None
260
+ self.data = data
261
+ self._expand_callback = None
262
+ self._collapse_callback = None
263
+
264
+ def expand(self, cb, *args, **kwargs):
265
+ self._expand_callback = (cb, args, kwargs)
266
+ return self
267
+
268
+ def _expanded(self):
269
+ if self._expand_callback:
270
+ cb, args, kwargs = self._expand_callback
271
+ cb(*args, **kwargs)
272
+
273
+ def collapse(self, cb, *args, **kwargs):
274
+ self._collapse_callback = (cb, args, kwargs)
275
+ return self
276
+
277
+ def _collapsed(self):
278
+ if self._collapse_callback:
279
+ cb, args, kwargs = self._collapse_callback
280
+ cb(*args, **kwargs)
PUI/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
- __version__ = "0.11"
1
+ __version__ = "0.13"
2
2
 
3
3
  from .node import *
4
4
  from .view import *
PUI/node.py CHANGED
@@ -73,6 +73,8 @@ class PUINode():
73
73
  self._onMouseUp = None
74
74
  self._onMouseMove = None
75
75
  self._onWheel = None
76
+ self._onDragEntered = None
77
+ self._onDropped = None
76
78
 
77
79
  self.ui = None
78
80
  self.args = args
@@ -306,6 +308,14 @@ class PUINode():
306
308
  self.genKey()
307
309
  return self
308
310
 
311
+ def dragEnter(self, callback, *cb_args, **cb_kwargs):
312
+ self._onDragEntered = callback, cb_args, cb_kwargs
313
+ return self
314
+
315
+ def drop(self, callback, *cb_args, **cb_kwargs):
316
+ self._onDropped = callback, cb_args, cb_kwargs
317
+ return self
318
+
309
319
  def click(self, callback, *cb_args, **cb_kwargs):
310
320
  self._onClicked = callback, cb_args, cb_kwargs
311
321
  return self
PUI/state.py CHANGED
@@ -8,7 +8,10 @@ class DummyBinding():
8
8
  def __init__(self, value):
9
9
  self.value = value
10
10
 
11
- class AttrBinding():
11
+ class BaseBinding():
12
+ pass
13
+
14
+ class AttrBinding(BaseBinding):
12
15
  def __init__(self, state, key):
13
16
  try:
14
17
  self.viewroot = find_puiview()
@@ -52,7 +55,7 @@ class AttrBinding():
52
55
  listeners.update(l)
53
56
  _notify(getattr(self.state, "_StateObject__pending"), listeners)
54
57
 
55
- class ListBinding():
58
+ class ListBinding(BaseBinding):
56
59
  def __init__(self, state, key):
57
60
  try:
58
61
  self.viewroot = find_puiview()
@@ -93,7 +96,7 @@ class ListBinding():
93
96
  def emit(self):
94
97
  _notify(getattr(self.state, "_StateList__pending"), getattr(self.state, "_StateList__listeners"))
95
98
 
96
- class DictBinding():
99
+ class DictBinding(BaseBinding):
97
100
  def __init__(self, state, key):
98
101
  try:
99
102
  self.viewroot = find_puiview()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: qpuiq
3
- Version: 0.11
3
+ Version: 0.13
4
4
  Summary: "PUI" Python Declarative UI Framework
5
5
  Home-page: https://github.com/buganini/PUI
6
6
  Author: Buganini Chiu
@@ -17,8 +17,23 @@ PUI doesn't do UI itself, it turns imperative UI libraries into reactive/declara
17
17
  [CPPUI: Experimental C++ Version](https://github.com/buganini/CPPUI)
18
18
 
19
19
  # Installation
20
- ```
20
+ ``` shell
21
21
  pip install QPUIQ
22
+
23
+ # Optional, for hot-reload
24
+ pip install jurigged
25
+
26
+ # Optional, for PySide6 backend
27
+ pip install PySide6
28
+
29
+ # Optional, for textual backend
30
+ pip install textual
31
+
32
+ # Optional, for wxPython backend
33
+ pip install wxPython
34
+
35
+ # Optional, for flet backend
36
+ pip install flet
22
37
  ```
23
38
 
24
39
  # Get Started
@@ -1,16 +1,16 @@
1
- PUI/__init__.py,sha256=k1uH-6Fwt9MOnxqx1cim50EYUceb4VQ-XycI8eLyuxg,966
1
+ PUI/__init__.py,sha256=KjpRQ20XzEqx9cTu0YVz7wUSCWsi1lsw9ecARH2Rw7U,966
2
2
  PUI/common.py,sha256=iCMdJPgdKxnZObpjjYzxa_LN8eS4w0FOTfgaDwD_fGY,500
3
3
  PUI/decorator.py,sha256=BN3POYv69QCDomoHENN-UA-d4wY_vfARIb5RJ2qEnS8,483
4
4
  PUI/dom.py,sha256=RgdDyv6vSFgkCoj9G2cjzQQOiymG8DwmmSoAZfxYvJM,10141
5
5
  PUI/interfaces.py,sha256=rGUciM3S6ICEVgVoahkva8yXUGpweqy1kAzhUQut40E,2182
6
- PUI/node.py,sha256=FwcqKGN-GU4TleXtFp2MZ0dPQq-UHTkesKlAf6cNPQ8,12912
7
- PUI/state.py,sha256=74PUUU7gewtuWB2-H51NyIUDtUGx_n3keWie_bkcIQk,20137
6
+ PUI/node.py,sha256=lO0j4pCGLEkq226dD3NYNhUi0e7ect5_8aeWrEki6ZE,13245
7
+ PUI/state.py,sha256=BLz-LM_s4_T9Tu_AqombQc87gkV5N8Wgsq1njSkxkBY,20201
8
8
  PUI/timeline.py,sha256=-mO1TLqxp2_3dk-EvdBE9wBkQf5RIPrPazTPXDzWSN0,940
9
9
  PUI/utils.py,sha256=canb7_Uz0sQ1UZDzyDuIsfAVXzEfZCkc9F81sMY4rTE,505
10
10
  PUI/view.py,sha256=Oe6sXLHD554GnlLlO5QpY7kegngkzrmMEYRHrdzGZUQ,4623
11
11
  PUI/PySide6/__init__.py,sha256=z895ldBVUaEqfGQW4CvYhWh2F6L0qGQA1MXUHVMf9Ms,1110
12
12
  PUI/PySide6/application.py,sha256=OsIE47efST4I13txD-7rS1cTWAGhynckl45Wdb1bafk,1471
13
- PUI/PySide6/base.py,sha256=he1BrtsGGB8ycphYTHo91VRnHxU9rM8Yb749FxLrZb4,6546
13
+ PUI/PySide6/base.py,sha256=wAkvN_dxG8fKHUNH99lO2Kc9ZEENQFDkPt1hkDFSBLM,7910
14
14
  PUI/PySide6/button.py,sha256=mHfcH98dABYgksuT58fK0amSwtCM9aaYwr7Y2EArEJA,561
15
15
  PUI/PySide6/canvas.py,sha256=mkMjGXcQmUeV1a1HChv6KTWuh_5ao_qA-dYqCnsHo3s,9108
16
16
  PUI/PySide6/checkbox.py,sha256=Rsns0BleE4g9yTDdlsD8IADU3qcQkVO2VsFVvYlNL88,900
@@ -29,11 +29,11 @@ PUI/PySide6/radiobutton.py,sha256=Qe5jjVkGSx8Pf3deAm-9c0cbYsrWl15W9UxrwrWuOo4,79
29
29
  PUI/PySide6/scroll.py,sha256=T8eXTW5ABPWbyOV5ioKXbBNE1CdoPmQ9IRmb2x12tqI,5857
30
30
  PUI/PySide6/splitter.py,sha256=ObjcC8UgkAL7o-xXhi4XIkDEKhC4s5Ukk7tKMNa023Q,797
31
31
  PUI/PySide6/tab.py,sha256=tMkhEfD4Wb_7Hs4-u4nOzm87GSHqmehcnwcFm24qRIg,953
32
- PUI/PySide6/table.py,sha256=KyEZpgKOGgTOSHwnwkDwvcrDpQHUd4_eaotmupvlnLs,2907
32
+ PUI/PySide6/table.py,sha256=TTCMf_YNKmkFiqs_qLqw3qbvFsxoBNnz9VMObx_2l3s,4800
33
33
  PUI/PySide6/text.py,sha256=4kRRZiuH-bLLJMNZ6hK9zAWOorsG-l4uujHbG6I5S20,1069
34
34
  PUI/PySide6/textfield.py,sha256=Us-UZMDCwrREwFLjPKKa3e3c_1U4WWD2kzFCe3xiY0k,2140
35
35
  PUI/PySide6/toolbar.py,sha256=NPkn99D5xK4RLBA0vxLD7EqYu5eh9ucCL2y1vSJWQl4,1800
36
- PUI/PySide6/tree.py,sha256=svGlI7dIvVwizq_IfoZD0rT3nrPOMGp04hXKwGzCQUE,3807
36
+ PUI/PySide6/tree.py,sha256=C50Uzh6vvGxJnxIDv3TQR95qbr6f_kbKv10jMduvz4Q,9006
37
37
  PUI/PySide6/window.py,sha256=CpkIFpleVr3oXOM6vdukahWtX5SV6cWNc1TUW84JPM4,2694
38
38
  PUI/flet/__init__.py,sha256=3YzGA0oPfu9eW8DtKQSoAsa8o6ZTGKWakYBTxGaaH8Y,438
39
39
  PUI/flet/application.py,sha256=3ZGZrAngSEkVK-WseOV-n_6ljhd86ZKBgO6Jp2PmsJA,937
@@ -96,8 +96,8 @@ PUI/wx/scroll.py,sha256=LPwRL9KZuoKrTFEWo1_zW3l_Fbaznq_2jA9GuwTp8Dc,1199
96
96
  PUI/wx/text.py,sha256=YeIyDyHH0xBcD_iXbYSTtvL25YDtug1QJNVPvCSAqEk,544
97
97
  PUI/wx/textfield.py,sha256=BmMebfqlDJqacaKdh2SON88xF73l0csC7L7hoNjz-qs,1778
98
98
  PUI/wx/window.py,sha256=juAsn3W4SzmH8f5LDGvjwppvPD8fDObRUJ_MkQFKCIE,1847
99
- qpuiq-0.11.dist-info/LICENSE.txt,sha256=1Xwik2AmLNGoIYhAPzvNC28M08Q3EvkOe4TtlQuSd_E,1072
100
- qpuiq-0.11.dist-info/METADATA,sha256=uR0W72qXqelQ20m8npo6zpoGaEBprgRv8g9N6kd5m3E,5453
101
- qpuiq-0.11.dist-info/WHEEL,sha256=UvcQYKBHoFqaQd6LKyqHw9fxEolWLQnlzP0h_LgJAfI,91
102
- qpuiq-0.11.dist-info/top_level.txt,sha256=zMudhifPite0CEVGYvdi-5W3P_dpum71xjU7_g-ZHS0,4
103
- qpuiq-0.11.dist-info/RECORD,,
99
+ qpuiq-0.13.dist-info/LICENSE.txt,sha256=1Xwik2AmLNGoIYhAPzvNC28M08Q3EvkOe4TtlQuSd_E,1072
100
+ qpuiq-0.13.dist-info/METADATA,sha256=ELthoIyCZ5CskEXuew_R1KnkFKIt1br0_1H3Z8An0NM,5716
101
+ qpuiq-0.13.dist-info/WHEEL,sha256=Z4pYXqR_rTB7OWNDYFOm1qRk0RX6GFP2o8LgvP453Hk,91
102
+ qpuiq-0.13.dist-info/top_level.txt,sha256=zMudhifPite0CEVGYvdi-5W3P_dpum71xjU7_g-ZHS0,4
103
+ qpuiq-0.13.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (74.0.0)
2
+ Generator: setuptools (70.3.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5