import sys from stringprep import in_table_c11 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 from PyQt5.QtCore import Qt import requests as req import time,random,numpy as np import threading import asyncio import json from PyQt5.QtWidgets import QFileDialog from PyQt5.QtCore import pyqtSignal, QObject,pyqtSlot import sqlite3 import logging logging.basicConfig(level=logging.DEBUG, format='%(asctime)s: %(message)s') logger = logging.getLogger(__name__) class CategoryDialog(QDialog): def __init__(self, parent=None, title="添加品类", initial_name="", initial_code=""): super().__init__(parent) self.setWindowTitle(title) self.setGeometry(100, 100, 400, 150) layout = QDialogVBoxLayout() # 品类名称输入框 name_label = QLabel("品类名称") self.category_edit = QDialogLineEdit() self.category_edit.setText(initial_name) layout.addWidget(name_label) layout.addWidget(self.category_edit) # 品类编码输入框 code_label = QLabel("品类编码") self.category_code_edit = QDialogLineEdit() self.category_code_edit.setText(initial_code) layout.addWidget(code_label) layout.addWidget(self.category_code_edit) button_box = QDialogButtonBox(QDialogButtonBox.StandardButton.Ok | QDialogButtonBox.StandardButton.Cancel) button_box.accepted.connect(self.accept) button_box.rejected.connect(self.reject) layout.addWidget(button_box) self.setLayout(layout) @staticmethod def add_category(self): dialog = CategoryDialog(self, "添加品类") if dialog.exec(): category_name = dialog.category_edit.text() category_code = dialog.category_code_edit.text() if category_name and category_code: item = QTreeWidgetItem(self.tree_widget) item.setText(1, category_name) item.setText(2, category_code) checkbox = QCheckBox() checkbox.setChecked(False) self.tree_widget.setItemWidget(item, 0, checkbox) @staticmethod def delete_category(self): selected_items = self.tree_widget.selectedItems() for item in selected_items: (item.parent() or self.tree_widget).takeTopLevelItem(self.tree_widget.indexOfTopLevelItem(item)) @staticmethod def edit_category(self): selected_items = self.tree_widget.selectedItems() if len(selected_items) != 1: QMessageBox.warning(self, "编辑品类", "请选择一个品类进行编辑") return item = selected_items[0] dialog = CategoryDialog(self, "编辑品类", item.text(1), item.text(2)) if dialog.exec(): new_category_name = dialog.category_edit.text() new_category_code = dialog.category_code_edit.text() if new_category_name and new_category_code: item.setText(1, new_category_name) item.setText(2, new_category_code) @staticmethod def save_categories(self): # 连接到SQLite数据库 conn = sqlite3.connect('buff.db') cursor = conn.cursor() # 创建表(如果表不存在) cursor.execute(''' CREATE TABLE IF NOT EXISTS categories ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, code TEXT NOT NULL, selected BOOLEAN NOT NULL DEFAULT 0 -- 新增字段,用于存储选择状态 ) ''') # 清空表中的数据 cursor.execute('DELETE FROM categories') # 获取树形控件中的所有项 for i in range(self.tree_widget.topLevelItemCount()): item = self.tree_widget.topLevelItem(i) category_name = item.text(1) category_code = item.text(2) checkbox = self.tree_widget.itemWidget(item, 0) selected = checkbox.isChecked() # 获取复选框的状态 # 插入数据到表中 cursor.execute(''' INSERT INTO categories (name, code, selected) VALUES (?, ?, ?) ''', (category_name, category_code, selected)) # 提交更改并关闭连接 conn.commit() conn.close() QMessageBox.information(self, "保存品类信息", "品类信息已成功保存")