CategoryDialog.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. import sys
  2. from stringprep import in_table_c11
  3. from PyQt5.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QHBoxLayout, QWidget, QPushButton, QTabWidget, QLabel, QLineEdit, QTextEdit, QFormLayout, QMessageBox, QTreeWidget, QTreeWidgetItem, QDialog, QVBoxLayout as QDialogVBoxLayout, QLineEdit as QDialogLineEdit, QDialogButtonBox, QCheckBox, QComboBox
  4. from PyQt5.QtCore import Qt
  5. import requests as req
  6. import time,random,numpy as np
  7. import threading
  8. import asyncio
  9. import json
  10. from PyQt5.QtWidgets import QFileDialog
  11. from PyQt5.QtCore import pyqtSignal, QObject,pyqtSlot
  12. import sqlite3
  13. import logging
  14. logging.basicConfig(level=logging.DEBUG, format='%(asctime)s: %(message)s')
  15. logger = logging.getLogger(__name__)
  16. class CategoryDialog(QDialog):
  17. def __init__(self, parent=None, title="添加品类", initial_name="", initial_code=""):
  18. super().__init__(parent)
  19. self.setWindowTitle(title)
  20. self.setGeometry(100, 100, 400, 150)
  21. layout = QDialogVBoxLayout()
  22. # 品类名称输入框
  23. name_label = QLabel("品类名称")
  24. self.category_edit = QDialogLineEdit()
  25. self.category_edit.setText(initial_name)
  26. layout.addWidget(name_label)
  27. layout.addWidget(self.category_edit)
  28. # 品类编码输入框
  29. code_label = QLabel("品类编码")
  30. self.category_code_edit = QDialogLineEdit()
  31. self.category_code_edit.setText(initial_code)
  32. layout.addWidget(code_label)
  33. layout.addWidget(self.category_code_edit)
  34. button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel)
  35. button_box.accepted.connect(self.accept)
  36. button_box.rejected.connect(self.reject)
  37. layout.addWidget(button_box)
  38. self.setLayout(layout)
  39. @staticmethod
  40. def add_category(self):
  41. dialog = CategoryDialog(self, "添加品类")
  42. if dialog.exec():
  43. category_name = dialog.category_edit.text()
  44. category_code = dialog.category_code_edit.text()
  45. if category_name and category_code:
  46. item = QTreeWidgetItem(self.tree_widget)
  47. item.setText(1, category_name)
  48. item.setText(2, category_code)
  49. checkbox = QCheckBox()
  50. checkbox.setChecked(False)
  51. self.tree_widget.setItemWidget(item, 0, checkbox)
  52. @staticmethod
  53. def delete_category(self):
  54. selected_items = self.tree_widget.selectedItems()
  55. for item in selected_items:
  56. (item.parent() or self.tree_widget).takeTopLevelItem(self.tree_widget.indexOfTopLevelItem(item))
  57. @staticmethod
  58. def edit_category(self):
  59. selected_items = self.tree_widget.selectedItems()
  60. if len(selected_items) != 1:
  61. QMessageBox.warning(self, "编辑品类", "请选择一个品类进行编辑")
  62. return
  63. item = selected_items[0]
  64. dialog = CategoryDialog(self, "编辑品类", item.text(1), item.text(2))
  65. if dialog.exec():
  66. new_category_name = dialog.category_edit.text()
  67. new_category_code = dialog.category_code_edit.text()
  68. if new_category_name and new_category_code:
  69. item.setText(1, new_category_name)
  70. item.setText(2, new_category_code)
  71. @staticmethod
  72. def save_categories(self):
  73. # 连接到SQLite数据库
  74. conn = sqlite3.connect('buff.db')
  75. cursor = conn.cursor()
  76. # 创建表(如果表不存在)
  77. cursor.execute('''
  78. CREATE TABLE IF NOT EXISTS categories (
  79. id INTEGER PRIMARY KEY AUTOINCREMENT,
  80. name TEXT NOT NULL,
  81. code TEXT NOT NULL,
  82. selected BOOLEAN NOT NULL DEFAULT 0 -- 新增字段,用于存储选择状态
  83. )
  84. ''')
  85. # 清空表中的数据
  86. cursor.execute('DELETE FROM categories')
  87. # 获取树形控件中的所有项
  88. for i in range(self.tree_widget.topLevelItemCount()):
  89. item = self.tree_widget.topLevelItem(i)
  90. category_name = item.text(1)
  91. category_code = item.text(2)
  92. checkbox = self.tree_widget.itemWidget(item, 0)
  93. selected = checkbox.isChecked() # 获取复选框的状态
  94. # 插入数据到表中
  95. cursor.execute('''
  96. INSERT INTO categories (name, code, selected)
  97. VALUES (?, ?, ?)
  98. ''', (category_name, category_code, selected))
  99. # 提交更改并关闭连接
  100. conn.commit()
  101. conn.close()
  102. QMessageBox.information(self, "保存品类信息", "品类信息已成功保存")