PyQt5天气应用切换国家后崩溃问题求助
PyQt5天气应用切换国家崩溃问题修复
问题根源
崩溃的核心原因是:切换国家后,城市下拉框的选项未与新国家的城市列表完全同步,或者country_class变量未更新为当前选中国家的实例,导致city_changed方法中访问country_class.cities()[city]时,city不是当前国家城市字典的有效键,触发KeyError。
修复方案
1. 同步更新国家实例与城市下拉框
修改国家选择变更的处理方法,确保切换国家时:
- 更新当前使用的国家类实例
- 清空并重新填充城市下拉框
- 默认选中第一个有效城市(避免空选触发错误)
示例代码:
def on_country_selected(self, country_name): # 假设get_country_class是你根据国家名称获取对应类的方法 self.current_country = self.get_country_class(country_name) # 清空城市下拉框 self.city_combo.clear() # 获取当前国家的城市字典并填充下拉框 city_dict = self.current_country.cities() if city_dict: self.city_combo.addItems(city_dict.keys()) # 默认选中第一个城市 first_city = next(iter(city_dict.keys())) self.city_combo.setCurrentText(first_city) # 手动触发城市变更逻辑 self.on_city_selected(first_city)
2. 增加城市键存在检查
修改city_changed方法,在访问城市坐标前先验证当前城市是否属于当前国家的城市列表,避免KeyError:
def on_city_selected(self, city): city_dict = self.current_country.cities() # 检查城市是否有效 if city not in city_dict: # 可添加提示逻辑,比如状态栏显示"无效城市" return coordinates = city_dict[city] # 后续天气数据获取与展示逻辑...
3. 避免信号重复触发(可选)
如果使用currentIndexChanged或currentTextChanged信号,切换国家填充城市时可能会多次触发信号,可临时断开信号再重新连接:
def on_country_selected(self, country_name): # 临时断开城市下拉框的信号 self.city_combo.currentTextChanged.disconnect(self.on_city_selected) # 执行清空、填充城市操作... # 重新连接信号 self.city_combo.currentTextChanged.connect(self.on_city_selected)
内容的提问来源于stack exchange,提问作者josous
相关产品推荐
相关产品推荐

