|
发表于 2024-5-8 18:17:52
|
显示全部楼层
如果`self.data_model`列表中的数据没有`code`和`name`字段,而是直接存储级别、区划代码和名称的话,您可以按照如下方式进行调整。
- self.data_model = [
- (1, '530000000000', '云南省'),
- (2, '530400000000', '玉溪市'),
- (3, '530402000000', '红塔区'),
- (4, '530402001000', '玉兴街道'),
- (5, '530402001001', '荷花社区居民委员会')
- ]
复制代码
接下来,您需要对示例代码中的`on_combobox_changed`进行修改。在逐层选择时,我们需要根据级别来筛选出符合条件的数据项并设置给下一个级别的`QComboBox`。
以下是修改后的示例代码:
- from PySide6.QtWidgets import QApplication, QMainWindow, QVBoxLayout, QWidget, QLabel, QComboBox
- class AreaSelectionApp(QMainWindow):
- def __init__(self):
- super().__init__()
- self.setWindowTitle("区划选择")
-
- self.data_model = [
- ...
- ]
-
- self.levels = 5 # 总共有5个级别
- self.comboboxes = []
-
- central_widget = QWidget()
- layout = QVBoxLayout()
- central_widget.setLayout(layout)
-
- for i in range(self.levels):
- combobox = QComboBox()
- combobox.currentIndexChanged.connect(self.on_combobox_changed)
- layout.addWidget(combobox)
- self.comboboxes.append(combobox)
-
- self.setCentralWidget(central_widget)
-
- def on_combobox_changed(self, index):
- selected_codes = []
- selected_names = []
- for i in range(index + 1):
- selected_code, selected_name = self.comboboxes[i].currentData()
- selected_codes.append(selected_code)
- selected_names.append(selected_name)
-
- if len(selected_codes) == self.levels:
- print(f"区划代码: {selected_codes}, 名称: {selected_names}")
-
- current_level = index + 1
- next_combobox = self.comboboxes[current_level]
- next_combobox.clear()
-
- current_code = selected_codes[current_level - 1] if current_level > 0 else None
- next_items = [item for item in self.data_model if item[0] == current_level and item[1].startswith(current_code)]
-
- for item in next_items:
- next_combobox.addItem(item[2], item)
-
- if len(next_items) > 0:
- next_combobox.setEnabled(True)
- else:
- next_combobox.setEnabled(False)
- if __name__ == '__main__':
- app = QApplication()
- window = AreaSelectionApp()
- window.show()
- app.exec()
复制代码
这个示例代码首先对数据模型进行调整,让每个元素都包含级别、区划代码和名称的信息。然后在`on_combobox_changed`方法中,我们使用`item[0]`来获取级别,`item[1]`来获取区划代码,`item[2]`来获取名称。
希望这能够解决问题!如果您还有其他疑问,请随时提问。祝您编程愉快!
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |
|