import json import os from qt.constant import POSITION_MAP, STONES_POSITIONS, EQUIPMENTS_DIR, ENCHANTS_DIR, STONES_DIR, MAX_STONE_ATTR from qt.constant import EMBED_POSITIONS, MAX_EMBED_LEVEL, MAX_STONE_LEVEL, SPECIAL_ENCHANT_POSITIONS from qt.components import ComboWithLabel, RadioWithLabel, TableWithLabel from PySide6.QtWidgets import QWidget, QVBoxLayout, QHBoxLayout, QGridLayout, QTabWidget class EquipmentWidget(QWidget): def __init__(self, label): super().__init__() self.position = POSITION_MAP[label] layout = QVBoxLayout(self) self.equipment_json = json.load(open(os.path.join(EQUIPMENTS_DIR, self.position), encoding="utf-8")) self.equipment_mapping = {v['id']: k for k, v in self.equipment_json.items()} self.enchant_json = json.load(open(os.path.join(ENCHANTS_DIR, self.position), encoding="utf-8")) self.enchant_mapping = {v['id']: k for k, v in self.enchant_json.items()} self.equipment = ComboWithLabel("装备") layout.addWidget(self.equipment) self.detail_widget = QWidget() detail_layout = QHBoxLayout(self.detail_widget) layout.addWidget(self.detail_widget) self.detail_widget.hide() layout.addStretch() input_layout = QGridLayout() detail_layout.addLayout(input_layout) if not self.enchant_json: self.enchant = None else: self.enchant = ComboWithLabel("附魔") self.enchant.set_items([""] + list(self.enchant_json)) input_layout.addWidget(self.enchant, 0, 0, 1, 2) if self.position not in SPECIAL_ENCHANT_POSITIONS: self.special_enchant = None else: self.special_enchant = RadioWithLabel("大附魔") input_layout.addWidget(self.special_enchant, 0, 2, 1, 2) self.strength_level = ComboWithLabel("精炼等级") input_layout.addWidget(self.strength_level, 1, 0) self.embed_levels = [] for i in range(EMBED_POSITIONS[self.position]): embed_level = ComboWithLabel( f"镶嵌等级-{i + 1}", items=[str(i) for i in range(MAX_EMBED_LEVEL + 1)] ) embed_level.combo_box.setCurrentIndex(MAX_EMBED_LEVEL) self.embed_levels.append(embed_level) input_layout.addWidget(embed_level, 1, i + 1) if self.position not in STONES_POSITIONS: self.stones_json = None self.stone_level = None self.stone_attrs = None else: self.stones_json = json.load(open(STONES_DIR, encoding="utf-8")) self.stone_level = ComboWithLabel( "五彩石等级", items=[str(i) for i in range(MAX_STONE_LEVEL + 1)] ) self.stone_attrs = [] input_layout.addWidget(self.stone_level, 2, 0) for i in range(MAX_STONE_ATTR): stone_attr = ComboWithLabel(f"五彩石属性-{i + 1}") self.stone_attrs.append(stone_attr) input_layout.addWidget(stone_attr, 2, i + 1) self.detail_widget.hide() output_layout = QVBoxLayout() detail_layout.addLayout(output_layout) self.base_attr = TableWithLabel("基本属性", column_count=2) output_layout.addWidget(self.base_attr) self.magic_attr = TableWithLabel("精炼属性", column_count=2) output_layout.addWidget(self.magic_attr) self.embed_attr = TableWithLabel("镶嵌属性", column_count=2) output_layout.addWidget(self.embed_attr) class EquipmentsWidget(QTabWidget): def __init__(self): super().__init__() self.equipments = {} for label in POSITION_MAP: self.equipments[label] = EquipmentWidget(label) self.addTab(self.equipments[label], label) def __getitem__(self, item) -> EquipmentWidget: return self.equipments[item] def items(self): return self.equipments.items() def values(self): return self.equipments.values()