| 51 | |
| 52 | |
| 53 | class CityLinkageWindow(QWidget): |
| 54 | |
| 55 | def __init__(self, *args, **kwargs): |
| 56 | super(CityLinkageWindow, self).__init__(*args, **kwargs) |
| 57 | layout = QHBoxLayout(self) |
| 58 | self.province_box = QComboBox(self, minimumWidth=200) # 市级以上 |
| 59 | self.city_box = QComboBox(self, minimumWidth=200) # 市 |
| 60 | self.county_box = QComboBox(self, minimumWidth=200) # 市级以下 |
| 61 | layout.addWidget(QLabel("省/直辖市/特别行政区", self)) |
| 62 | layout.addWidget(self.province_box) |
| 63 | layout.addItem(QSpacerItem( |
| 64 | 20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) |
| 65 | layout.addWidget(QLabel("市", self)) |
| 66 | layout.addWidget(self.city_box) |
| 67 | layout.addItem(QSpacerItem( |
| 68 | 20, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)) |
| 69 | layout.addWidget(QLabel("区/县", self)) |
| 70 | layout.addWidget(self.county_box) |
| 71 | self.initModel() |
| 72 | self.initSignal() |
| 73 | self.initData() |
| 74 | |
| 75 | def initSignal(self): |
| 76 | # 初始化信号槽 |
| 77 | self.province_box.currentIndexChanged.connect( |
| 78 | self.city_model.setFilter) |
| 79 | self.city_box.currentIndexChanged.connect(self.county_model.setFilter) |
| 80 | |
| 81 | def initModel(self): |
| 82 | # 初始化模型 |
| 83 | self.province_model = SortFilterProxyModel(self) |
| 84 | self.city_model = SortFilterProxyModel(self) |
| 85 | self.county_model = SortFilterProxyModel(self) |
| 86 | # 设置模型 |
| 87 | self.province_box.setModel(self.province_model) |
| 88 | self.city_box.setModel(self.city_model) |
| 89 | self.county_box.setModel(self.county_model) |
| 90 | |
| 91 | def initData(self): |
| 92 | # 初始化数据 |
| 93 | datas = open("Data/data.json", "rb").read() |
| 94 | encoding = chardet.detect(datas) or {} |
| 95 | datas = datas.decode(encoding.get("encoding", "utf-8")) |
| 96 | datas = json.loads(datas) |
| 97 | # 开始解析数据 |
| 98 | for data in datas: |
| 99 | item_code = data.get("item_code") # 编码 |
| 100 | item_name = data.get("item_name") # 名字 |
| 101 | item = QStandardItem(item_name) |
| 102 | item.setData(item_code, Qt.ToolTipRole) |
| 103 | if item_code.endswith("0000"): # 4个0结尾的是市级以上的 |
| 104 | self.province_model.appendRow(item) |
| 105 | elif item_code.endswith("00"): # 2个0结尾的是市 |
| 106 | self.city_model.appendRow(item) |
| 107 | else: # 市以下 |
| 108 | self.county_model.appendRow(item) |
| 109 | |
| 110 | |