python - 使用 tkinter 创建多个按钮
问题描述
我正在尝试在 for 循环中使用 tkinter 创建几个按钮,但是我在传递给它们的命令时遇到了一些问题,而且由于我需要创建的按钮数量不固定,所以我不能手动创建它们(扫雷游戏)。
按钮已正确创建并以网格形式显示,但所有命令都相同(最后一个按钮创建的命令)。
我的代码看起来像:
rows = 5
columns = 5
buttons_dict = {}
for i, row in enumerate(range(rows)):
for j, column in enumerate(range(columns)):
buttons_dict[(i, j)] = tk.Button(top_board_frame, command=lambda: btn_click(i, j))
buttons_dict[(i, j)].grid(row=i, column=j)
我的意图是向每个按钮传递一个函数,该函数在单击时返回按钮的坐标。就像是:
def btn_click(i, j):
current_pair = (i, j)
print(current_pair)
上面代码的问题是它返回最后创建的按钮的坐标,无论单击哪个按钮。
解决方案
你可以做这样的事情。在命令中传递对按钮的引用。
btn = buttons_dict[(i, j)] = tk.Button(top_board_frame)
btn.configure(command=lambda: btn_click(btn, i, j))
推荐阅读
- python - 从二进制到base 48的转换
- python-3.x - pyimport运行python3程序出错
- amazon-web-services - AWS SNS 从 Ec2 独立 Java 应用程序推送到 android 手机
- python - gem5 "ImportError: No module named Six" 即使安装了模块六
- tcp - TCP 可靠服务
- c++ - C++:右值引用构造函数和复制省略
- ffmpeg - 使用FFmpeg重新编码时如何获得视频无损旋转?
- airflow - 为什么我的 Airflow DAG 没有运行完成?
- github - 谁可以转让回购所有权
- python - SQLITE3 python根据字符串日期yyyy/mm/dd hh:mm:ss删除行