|
@@ -13,6 +13,7 @@
|
13
|
13
|
# https://doc.qt.io/qtforpython/licenses.html
|
14
|
14
|
#
|
15
|
15
|
# ///////////////////////////////////////////////////////////////
|
|
16
|
+
|
16
|
17
|
from PySide6.QtWidgets import QFileDialog,QWidget, QVBoxLayout, QTreeWidget, QApplication, QTreeWidgetItem
|
17
|
18
|
from PySide6.QtCore import Signal, Qt, Slot, QObject
|
18
|
19
|
from PySide6.QtSql import QSqlTableModel,QSqlDatabase
|
|
@@ -124,6 +125,83 @@ class ElTreeData(QObject):
|
124
|
125
|
# 数据改变时发出信号
|
125
|
126
|
self.styleSheet_changed.emit(self.styleSheet)
|
126
|
127
|
|
|
128
|
+#全数据库
|
|
129
|
+class ElTree(QWidget):
|
|
130
|
+ """
|
|
131
|
+ Control
|
|
132
|
+ """
|
|
133
|
+ itemClicked: Signal = Signal(object)
|
|
134
|
+ itemDoubleClicked: Signal = Signal(object)
|
|
135
|
+
|
|
136
|
+ def __init__(self, treeData: ElTreeData, parent=None):
|
|
137
|
+ super(ElTree, self).__init__(parent=parent)
|
|
138
|
+
|
|
139
|
+ self.data = treeData
|
|
140
|
+ # 将按钮的点击信号绑定到当前类的点击信号
|
|
141
|
+ widgets.allTreeWidget.itemClicked.connect(lambda item: self.itemClicked.emit(item.data(0, Qt.UserRole + 1)))
|
|
142
|
+ widgets.allTreeWidget.itemDoubleClicked.connect(lambda item: self.itemDoubleClicked.emit(item.data(0, Qt.UserRole + 1)))
|
|
143
|
+ self.__render_items(True)
|
|
144
|
+
|
|
145
|
+ def __render_items(self, is_clear: bool):
|
|
146
|
+ if is_clear:
|
|
147
|
+ widgets.allTreeWidget.clear()
|
|
148
|
+ widgets.qureyTreeWidget.clear()
|
|
149
|
+ widgets.allTreeWidget.setColumnCount(1)
|
|
150
|
+ widgets.allTreeWidget.setHeaderHidden(True)
|
|
151
|
+ widgets.qureyTreeWidget.setColumnCount(1)
|
|
152
|
+ widgets.qureyTreeWidget.setHeaderHidden(True)
|
|
153
|
+ if self.data.items is not None:
|
|
154
|
+ # 转为字典
|
|
155
|
+ mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
|
|
156
|
+ # 树容器
|
|
157
|
+ treeWidgetItems: list[QTreeWidgetItem] = []
|
|
158
|
+ for d in self.data.items:
|
|
159
|
+ # 如果找不到父级项,则是根节点
|
|
160
|
+ parent: TreeWidgetItem = mapping.get(d.parent_id)
|
|
161
|
+ if parent is None:
|
|
162
|
+ treeWidgetItems.append(d.treeWidgetItem)
|
|
163
|
+ else:
|
|
164
|
+ parent.treeWidgetItem.addChild(d.treeWidgetItem)
|
|
165
|
+
|
|
166
|
+ # 挂载到树上
|
|
167
|
+ widgets.allTreeWidget.insertTopLevelItems(0, treeWidgetItems)
|
|
168
|
+
|
|
169
|
+#查询
|
|
170
|
+class ElTree1(QWidget):
|
|
171
|
+ """
|
|
172
|
+ Control
|
|
173
|
+ """
|
|
174
|
+ itemClicked: Signal = Signal(object)
|
|
175
|
+ itemDoubleClicked: Signal = Signal(object)
|
|
176
|
+
|
|
177
|
+ def __init__(self, treeData: ElTreeData, parent=None):
|
|
178
|
+ super(ElTree1, self).__init__(parent=parent)
|
|
179
|
+ self.data = treeData
|
|
180
|
+ # 将按钮的点击信号绑定到当前类的点击信号
|
|
181
|
+ widgets.qureyTreeWidget.itemClicked.connect(lambda item: self.itemClicked.emit(item.data(0, Qt.UserRole + 1)))
|
|
182
|
+ widgets.qureyTreeWidget.itemDoubleClicked.connect(lambda item: self.itemDoubleClicked.emit(item.data(0, Qt.UserRole + 1)))
|
|
183
|
+ self.__render_items(True)
|
|
184
|
+
|
|
185
|
+ def __render_items(self, is_clear: bool):
|
|
186
|
+ if is_clear:
|
|
187
|
+ widgets.qureyTreeWidget.clear()
|
|
188
|
+ widgets.qureyTreeWidget.setColumnCount(1)
|
|
189
|
+ widgets.qureyTreeWidget.setHeaderHidden(True)
|
|
190
|
+ if self.data.items is not None:
|
|
191
|
+ # 转为字典
|
|
192
|
+ mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
|
|
193
|
+ # 树容器
|
|
194
|
+ treeWidgetItems: list[QTreeWidgetItem] = []
|
|
195
|
+ for d in self.data.items:
|
|
196
|
+ # 如果找不到父级项,则是根节点
|
|
197
|
+ parent: TreeWidgetItem = mapping.get(d.parent_id)
|
|
198
|
+ if parent is None:
|
|
199
|
+ treeWidgetItems.append(d.treeWidgetItem)
|
|
200
|
+ else:
|
|
201
|
+ parent.treeWidgetItem.addChild(d.treeWidgetItem)
|
|
202
|
+
|
|
203
|
+ # 挂载到树上
|
|
204
|
+ widgets.qureyTreeWidget.insertTopLevelItems(0, treeWidgetItems)
|
127
|
205
|
|
128
|
206
|
class MainWindow(QMainWindow):
|
129
|
207
|
def __init__(self):
|
|
@@ -224,81 +302,19 @@ class MainWindow(QMainWindow):
|
224
|
302
|
widgets.stackedWidget.setCurrentWidget(widgets.home)
|
225
|
303
|
widgets.btn_home.setStyleSheet(UIFunctions.selectMenu(widgets.btn_home.styleSheet()))
|
226
|
304
|
|
227
|
|
- #初始化树状组件
|
228
|
|
- #///////////////////////////////////////////////////////////////
|
229
|
|
- self.itemClicked: Signal = Signal(object)
|
230
|
|
- self.itemDoubleClicked: Signal = Signal(object)
|
231
|
|
- sqll = self.sql_init()
|
232
|
|
- sqltree = ElTreeData(items=sqll)
|
233
|
|
- self.data = sqltree
|
234
|
|
- # 将按钮的点击信号绑定到当前类的点击信号
|
235
|
|
- # 信号改为展示方法,这里同导出展示
|
236
|
|
- # widgets.allTreeWidget.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
|
237
|
|
- widgets.allTreeWidget.itemClicked.connect(self.test_method)
|
238
|
|
- widgets.allTreeWidget.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
|
239
|
|
- self.__render_items(True)
|
|
305
|
+ #初始化树状数据库
|
|
306
|
+ tree_button = self.sql_init()
|
|
307
|
+ tree_button.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
|
|
308
|
+ tree_button.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
|
240
|
309
|
|
241
|
310
|
self.bind()
|
242
|
311
|
|
243
|
|
- def test_method(self):
|
244
|
|
- print('ok')
|
245
|
|
-
|
246
|
312
|
#绑定组件
|
247
|
313
|
def bind(self):
|
248
|
314
|
# 计算
|
249
|
315
|
widgets.compute.clicked.connect(self.computeClick)
|
250
|
316
|
widgets.search.clicked.connect(self.searchClick)
|
251
|
317
|
|
252
|
|
- #全部
|
253
|
|
- def __render_items(self, is_clear: bool):
|
254
|
|
- if is_clear:
|
255
|
|
- widgets.allTreeWidget.clear()
|
256
|
|
- widgets.qureyTreeWidget.clear()
|
257
|
|
- widgets.allTreeWidget.setColumnCount(1)
|
258
|
|
- widgets.allTreeWidget.setHeaderHidden(True)
|
259
|
|
- widgets.qureyTreeWidget.setColumnCount(1)
|
260
|
|
- widgets.qureyTreeWidget.setHeaderHidden(True)
|
261
|
|
- if self.data.items is not None:
|
262
|
|
- # 转为字典
|
263
|
|
- mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
|
264
|
|
- # 树容器
|
265
|
|
- treeWidgetItems: list[QTreeWidgetItem] = []
|
266
|
|
- for d in self.data.items:
|
267
|
|
- # 如果找不到父级项,则是根节点
|
268
|
|
- parent: TreeWidgetItem = mapping.get(d.parent_id)
|
269
|
|
- if parent is None:
|
270
|
|
- treeWidgetItems.append(d.treeWidgetItem)
|
271
|
|
- else:
|
272
|
|
- parent.treeWidgetItem.addChild(d.treeWidgetItem)
|
273
|
|
-
|
274
|
|
- # 挂载到树上
|
275
|
|
- widgets.allTreeWidget.insertTopLevelItems(0, treeWidgetItems)
|
276
|
|
-
|
277
|
|
- #搜索
|
278
|
|
- def __render_items1(self, is_clear: bool):
|
279
|
|
- if is_clear:
|
280
|
|
- widgets.qureyTreeWidget.clear()
|
281
|
|
- widgets.qureyTreeWidget.setColumnCount(1)
|
282
|
|
- widgets.qureyTreeWidget.setHeaderHidden(True)
|
283
|
|
- if self.data.items is not None:
|
284
|
|
- # 转为字典
|
285
|
|
- mapping: dict[any, TreeWidgetItem] = dict(zip([i.id for i in self.data.items], self.data.items))
|
286
|
|
- # 树容器
|
287
|
|
- treeWidgetItems: list[QTreeWidgetItem] = []
|
288
|
|
- for d in self.data.items:
|
289
|
|
- # 如果找不到父级项,则是根节点
|
290
|
|
- parent: TreeWidgetItem = mapping.get(d.parent_id)
|
291
|
|
- if parent is None:
|
292
|
|
- treeWidgetItems.append(d.treeWidgetItem)
|
293
|
|
- else:
|
294
|
|
- parent.treeWidgetItem.addChild(d.treeWidgetItem)
|
295
|
|
-
|
296
|
|
- # 挂载到树上
|
297
|
|
- widgets.qureyTreeWidget.insertTopLevelItems(0, treeWidgetItems)
|
298
|
|
-
|
299
|
|
-
|
300
|
|
-
|
301
|
|
-
|
302
|
318
|
#删除tableview
|
303
|
319
|
def delete_table_view(table_view):
|
304
|
320
|
table_view.setParent(None)
|
|
@@ -582,38 +598,40 @@ class MainWindow(QMainWindow):
|
582
|
598
|
result1 = cursor1.fetchall()
|
583
|
599
|
for re1 in result1:
|
584
|
600
|
str1 = re1[0].decode('utf-8')
|
585
|
|
- sqlitem.append(TreeWidgetItem(id, gcid, str1, icon=QIcon("D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png")))
|
586
|
601
|
list1 = []
|
587
|
|
- list1.append(dbname)
|
|
602
|
+ list1.append(dbpath)
|
588
|
603
|
list1.append('水准测段高差稳定计算')
|
589
|
604
|
list1.append(str1)
|
590
|
605
|
self.dblist.append(list1)
|
|
606
|
+ sqlitem.append(TreeWidgetItem(id, gcid, str1, icon=QIcon(
|
|
607
|
+ "D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png"),extend={'listData': list1}))
|
591
|
608
|
id = id + 1
|
592
|
609
|
sqlstr2 = 'SELECT TableName FROM GS_Input_Param;'
|
593
|
610
|
cursor1.execute(sqlstr2)
|
594
|
611
|
result2 = cursor1.fetchall()
|
595
|
612
|
for re2 in result2:
|
596
|
613
|
str2 = re2[0].decode('utf-8')
|
597
|
|
- sqlitem.append(TreeWidgetItem(id, gsid, str2, icon=QIcon("D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png")))
|
598
|
614
|
list2 = []
|
599
|
|
- list2.append(dbname)
|
|
615
|
+ list2.append(dbpath)
|
600
|
616
|
list2.append('控制网复测平面基准计算')
|
601
|
617
|
list2.append(str2)
|
602
|
618
|
self.dblist.append(list2)
|
|
619
|
+ sqlitem.append(TreeWidgetItem(id, gsid, str2, icon=QIcon("D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png"),extend={'listData': list2}))
|
603
|
620
|
id = id + 1
|
604
|
621
|
sqlstr3 = 'SELECT TableName FROM WD_Input_Param;'
|
605
|
622
|
cursor1.execute(sqlstr3)
|
606
|
623
|
result3 = cursor1.fetchall()
|
607
|
624
|
for re3 in result3:
|
608
|
625
|
str3 = re3[0].decode('utf-8')
|
609
|
|
- sqlitem.append(TreeWidgetItem(id, wdid, str3, icon=QIcon("D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png")))
|
610
|
626
|
list3 = []
|
611
|
|
- list3.append(dbname)
|
|
627
|
+ list3.append(dbpath)
|
612
|
628
|
list3.append('平面控制网稳定性计算')
|
613
|
629
|
list3.append(str3)
|
614
|
630
|
self.dblist.append(list3)
|
|
631
|
+ sqlitem.append(TreeWidgetItem(id, wdid, str3, icon=QIcon("D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png"),extend={'listData': list3}))
|
615
|
632
|
id = id + 1
|
616
|
|
- return sqlitem
|
|
633
|
+ button = ElTree(ElTreeData(sqlitem))
|
|
634
|
+ return button
|
617
|
635
|
|
618
|
636
|
#关键词查询
|
619
|
637
|
def searchClick(self):
|
|
@@ -666,23 +684,16 @@ class MainWindow(QMainWindow):
|
666
|
684
|
zdy.append(zdy1)
|
667
|
685
|
id = id + 1
|
668
|
686
|
sqlitem.append(TreeWidgetItem(id, fid, list2[2], icon=QIcon(
|
669
|
|
- "D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png"), extend=list2[2]))
|
|
687
|
+ "D:/4work_now/20240819GS/20241211/Front/images/icons/cil-file.png"), extend={'listData': list2}))
|
670
|
688
|
zdy1 = []
|
671
|
689
|
zdy1.append(id)
|
672
|
690
|
zdy1.append(fid)
|
673
|
691
|
zdy1.append(list2[2])
|
674
|
692
|
zdy.append(zdy1)
|
675
|
693
|
id = id + 1
|
676
|
|
- #展示
|
677
|
|
- self.itemClicked: Signal = Signal(object)
|
678
|
|
- self.itemDoubleClicked: Signal = Signal(object)
|
679
|
|
- sqltree = ElTreeData(items=sqlitem)
|
680
|
|
- self.data = sqltree
|
681
|
|
- # 将按钮的点击信号绑定到当前类的点击信号
|
682
|
|
- # 信号改为展示方法,这里同导出展示
|
683
|
|
- self.ui.qureyTreeWidget.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
|
684
|
|
- self.ui.qureyTreeWidget.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
|
685
|
|
- self.__render_items1(True)
|
|
694
|
+ search_button = ElTree1(ElTreeData(sqlitem))
|
|
695
|
+ search_button.itemClicked.connect(lambda extend: print("单击->扩展数据为:", extend))
|
|
696
|
+ search_button.itemDoubleClicked.connect(lambda extend: print("双击->扩展数据为:", extend))
|
686
|
697
|
|
687
|
698
|
#直接这个基础上改点选输出表格(未改)
|
688
|
699
|
def computeClick(self):
|