You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 02:10:51