Python Tkinter中字典.get()无法获取按钮对象问题求助
问题分析与解决
核心原因
你完全搞反了dict.get()的参数逻辑:
dict[key]是通过键(比如"a1")获取对应的值(按钮对象),这是正确的用法dict.get(x)要求x必须是字典的键,但你传入的是字典的值(按钮对象),而你的字典根本没有以按钮对象为键的条目,所以自然返回None(get()的默认返回值)
正确用法示例
1. 通过棋盘格名称获取按钮(你的原始需求)
直接用键取值即可,没必要绕get():
button = chess_board_dict["a1"]
如果担心键不存在报错,用get()时还是要传键:
button = chess_board_dict.get("a1") # 键不存在时返回None button = chess_board_dict.get("a1", default_button) # 可指定键不存在时的默认值
2. 通过按钮对象反向找棋盘格名称(如果有这个需求)
字典默认是键到值的单向映射,要反向查询得自己遍历键值对:
def find_position_by_button(button, board_dict): for pos, btn in board_dict.items(): if btn is button: # 用is判断对象同一性更准确 return pos return None # 没找到对应按钮时返回None # 调用示例 current_btn = chess_board_dict["a1"] pos = find_position_by_button(current_btn, chess_board_dict) print(pos) # 输出 "a1"
补充说明
Tkinter的按钮对象(比如.!button1)是内存中的实例对象,你的字典键都是字符串类型("a1"这类),所以拿按钮对象当键去查询,字典里根本没有对应的条目,肯定拿不到结果。
内容的提问来源于stack exchange,提问作者Scott Preen
相关产品推荐
相关产品推荐

