rmy 2 месяцев назад
Родитель
Сommit
c7347df902
1 измененных файлов: 127 добавлений и 26 удалений
  1. 127
    26
      Front/main.py

+ 127
- 26
Front/main.py Просмотреть файл

@@ -38,6 +38,7 @@ from Front.modules import Settings
38 38
 from Front.widgets import *
39 39
 # main.py
40 40
 from Front.back.Program_Run.utils import resource_path  # 从 utils.py 导入 resource_path
41
+import gc
41 42
 
42 43
 # IMPORT / GUI AND MODULES AND WIDGETS
43 44
 # ///////////////////////////////////////////////////////////////
@@ -190,20 +191,75 @@ class ElTree(QWidget):
190 191
             widgets.allTreeWidget.insertTopLevelItems(0, treeWidgetItems)
191 192
 
192 193
     def contextMenuEvent(self, pos):
193
-        # 创建右键菜单
194
-        context_menu = QMenu(self)
195
-
196
-        # 添加删除选项
197
-        delete_action = QAction("删除", self)
198
-        delete_action.triggered.connect(self.delete_item)
199
-        context_menu.addAction(delete_action)
200
-
201
-        # 添加导出选项
202
-        export_action = QAction("导出", self)
203
-        export_action.triggered.connect(self.export_item)
204
-        context_menu.addAction(export_action)
194
+        try:
195
+            # 获取当前选中的项目
196
+            items = widgets.allTreeWidget.selectedItems()
197
+            item = items[0]
198
+            if item:
199
+                # 创建右键菜单
200
+                context_menu = QMenu(self)
201
+                if item.parent() is None:
202
+                    # 根节点菜单
203
+                    action = QAction("删除库", self)
204
+                    action.triggered.connect(self.delete_db)
205
+                    context_menu.addAction(action)
206
+                elif item.parent().parent() is None:
207
+                    # 父节点菜单
208
+                    action1 = QAction("删除", self)
209
+                    action1.triggered.connect(lambda: self.on_parent_action(item))
210
+                    context_menu.addAction(action1)
211
+                else:
212
+                    # 子节点菜单
213
+                    action = QAction("删除表", self)
214
+                    action.triggered.connect(self.delete_item)
215
+                    context_menu.addAction(action)
216
+                    action2 = QAction("导出", self)
217
+                    action2.triggered.connect(self.export_item)
218
+                    context_menu.addAction(action2)
219
+                # # 创建右键菜单
220
+                # context_menu = QMenu(self)
221
+                #
222
+                # # 添加删除选项
223
+                # delete_action = QAction("删除", self)
224
+                # delete_action.triggered.connect(self.delete_item)
225
+                # context_menu.addAction(delete_action)
226
+                #
227
+                # # 添加导出选项
228
+                # export_action = QAction("导出", self)
229
+                # export_action.triggered.connect(self.export_item)
230
+                # context_menu.addAction(export_action)
231
+                context_menu.exec(widgets.allTreeWidget.mapToGlobal(pos))
232
+        except:
233
+            pass
205 234
 
206
-        context_menu.exec(widgets.allTreeWidget.mapToGlobal(pos))
235
+    def delete_db(self):
236
+        # 获取当前选中的项目
237
+        selected_items = widgets.allTreeWidget.selectedItems()
238
+        item = selected_items[0]
239
+        dbname = item.text(0)
240
+        dbpath = os.path.join(os.path.abspath('../SQL'), f"{dbname}.db")
241
+        # 确认删除操作
242
+        reply = QMessageBox.question(self, '确认删除', f'确定要删除项目 {dbname} 吗?',
243
+                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
244
+        if reply == QMessageBox.No:
245
+            return
246
+        try:
247
+            # 从 QTreeWidget 中移除节点
248
+            widgets.allTreeWidget.takeTopLevelItem(widgets.allTreeWidget.indexOfTopLevelItem(item))
249
+            try:
250
+                widgets.qureyTreeWidget.takeTopLevelItem(widgets.allTreeWidget.indexOfTopLevelItem(item))
251
+            except:
252
+                pass
253
+            # 强制垃圾回收
254
+            gc.collect()
255
+            os.remove(dbpath)
256
+            QMessageBox.information(self, '成功', f'项目 {dbname} 中的数据已删除')
257
+            # 刷新树状图
258
+            self.refresh_tree()
259
+            # 模拟点击 Enter 键  实现程序自动刷新的效果
260
+            QTest.keyClick(widgets.allTreeWidget, Qt.Key_Return)
261
+        except Exception as e:
262
+            QMessageBox.critical(self, '错误', f'删除数据时出错: {str(e)}')
207 263
 
208 264
     def delete_item(self):
209 265
         # 获取当前选中的项目
@@ -364,20 +420,65 @@ class ElTree1(QWidget):
364 420
             widgets.qureyTreeWidget.insertTopLevelItems(0, treeWidgetItems)
365 421
 
366 422
     def contextMenuEvent(self, pos):
367
-        # 创建右键菜单
368
-        context_menu = QMenu(self)
369
-
370
-        # 添加删除选项
371
-        delete_action = QAction("删除", self)
372
-        delete_action.triggered.connect(self.delete_item)
373
-        context_menu.addAction(delete_action)
374
-
375
-        # 添加导出选项
376
-        export_action = QAction("导出", self)
377
-        export_action.triggered.connect(self.export_item)
378
-        context_menu.addAction(export_action)
423
+        # 获取当前选中的项目
424
+        try:
425
+            items = widgets.qureyTreeWidget.selectedItems()
426
+            item = items[0]
427
+            if item:
428
+                # 创建右键菜单
429
+                context_menu = QMenu(self)
430
+                if item.parent() is None:
431
+                    # 根节点菜单
432
+                    action = QAction("删除库", self)
433
+                    action.triggered.connect(self.delete_db)
434
+                    context_menu.addAction(action)
435
+                elif item.parent().parent() is None:
436
+                    # 父节点菜单
437
+                    action1 = QAction("删除", self)
438
+                    action1.triggered.connect(lambda: self.on_parent_action(item))
439
+                    context_menu.addAction(action1)
440
+                else:
441
+                    # 子节点菜单
442
+                    action = QAction("删除表", self)
443
+                    action.triggered.connect(self.delete_item)
444
+                    context_menu.addAction(action)
445
+                    action2 = QAction("导出", self)
446
+                    action2.triggered.connect(self.export_item)
447
+                    context_menu.addAction(action2)
448
+                context_menu.exec(widgets.qureyTreeWidget.mapToGlobal(pos))
449
+        except:
450
+            pass
379 451
 
380
-        context_menu.exec(widgets.qureyTreeWidget.mapToGlobal(pos))
452
+    def delete_db(self):
453
+        # 获取当前选中的项目
454
+        selected_items = widgets.qureyTreeWidget.selectedItems()
455
+        item = selected_items[0]
456
+        dbname = item.text(0)
457
+        dbpath = os.path.join(os.path.abspath('../SQL'), f"{dbname}.db")
458
+        # 确认删除操作
459
+        reply = QMessageBox.question(self, '确认删除', f'确定要删除项目 {dbname} 吗?',
460
+                                     QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
461
+        if reply == QMessageBox.No:
462
+            return
463
+        try:
464
+            # 从 QTreeWidget 中移除节点
465
+            widgets.allTreeWidget.takeTopLevelItem(widgets.allTreeWidget.indexOfTopLevelItem(item))
466
+            try:
467
+                widgets.qureyTreeWidget.takeTopLevelItem(widgets.allTreeWidget.indexOfTopLevelItem(item))
468
+            except:
469
+                pass
470
+            # 强制垃圾回收
471
+            gc.collect()
472
+            #删除路径
473
+            os.remove(dbpath)
474
+            QMessageBox.information(self, '成功', f'项目 {dbname} 中的数据已删除')
475
+            # 清空树状图
476
+            widgets.qureyTreeWidget.clear()
477
+            self.refresh_tree()
478
+            # 模拟点击 Enter 键  实现程序自动刷新的效果
479
+            QTest.keyClick(widgets.qureyTreeWidget, Qt.Key_Return)
480
+        except Exception as e:
481
+            QMessageBox.critical(self, '错误', f'删除数据时出错: {str(e)}')
381 482
 
382 483
     def delete_item(self):
383 484
         # 获取当前选中的项目

Загрузка…
Отмена
Сохранить