Entry回车不响应的主因是缺乏焦点,须调用focus_set();绑定需用bind("", lambda e: func()),不可用command;父容器若拦截事件或未设takefocus=True也会导致失效。

直接用 tkinter + requests 就能跑起来,不用装额外 GUI 框架;但别跳过错误处理和 API 频率限制,否则本地测试正常、一打包就查不到数据。
用 tkinter 做界面时,为什么输入框总不响应回车?
默认情况下 Entry 绑定 <return></return> 事件后,必须显式调用 widget.focus_set() 才能触发——尤其在窗口刚弹出时焦点不在输入框上。
- 在创建
Entry后立刻加entry.focus_set() - 绑定事件用
entry.bind("<return>", lambda e: fetch_weather())</return>,别写成command=fetch_weather(那是按钮用的) - 如果用了
Frame包裹控件,确保父容器没拦截键盘事件(比如设置了takefocus=False)
requests.get() 调高德/和风天气 API 时返回 403 或空 JSON?
不是密钥错了,大概率是请求头缺失或 User-Agent 被识别为爬虫。免费 API 对未声明来源的请求会静默拒绝。
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
- 必须加
headers={"User-Agent": "Mozilla/5.0"},哪怕只是占位 - 高德 API 要求参数拼在 URL 里,且
key必须放在最后,顺序错一个字符就 400;和风则要求location和key同级,不能嵌套 - 调试时先用
print(resp.status_code, resp.text[:200])看原始响应,别只依赖resp.json()(它遇到非 JSON 会直接抛异常)
打包成 exe 后查天气报 ModuleNotFoundError: No module named 'requests'?
pyinstaller 默认不会自动收集 requests 依赖的证书包(certifi),导致 HTTPS 请求失败,错误却显示成模块不存在。
- 打包命令加
--hidden-import certifi:pyinstaller --onefile --hidden-import certifi main.py - 或者在代码开头手动指定证书路径:
import requests; requests.utils.DEFAULT_CA_BUNDLE_PATH = requests.certs.where() - Python 3.11 的
venv环境里打包,别用全局 Python——避免本地装了 requests 但打包环境没装
城市名拼音要严格匹配 API 要求(比如“北京”得传 beijing,不是 Beijing 或 bei jing),这个细节没文档明说,但错一位就返回空数据,而且不报错。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










