Python Tkinter 解决循环创建按钮时获取文本值的问题

沈亦白
沈亦白
发布时间:2026-10-14| 5人浏览过
原创

本文介绍在Python Tkinter中使用循环创建按钮时,因闭包机制导致所有按钮返回相同值的问题。通过自定义myButton类,将按钮文本作为参数传入,利用lambda表达式绑定具体文本,从而正确获取每个按钮的点击值。

背景

近期笔者正在学习Python图形界面开发,从tkinter模块开始入门,计划先编写一个小软件进行实践。经过思考,决定制作一个简易计算器。相关代码已发布,可通过链接查看。

问题重现

然而,在使用循环批量创建数字按钮时遇到了障碍,问题代码如下


for i in range(3):
    num_frame = tk.Frame(major_frame)
    num_frame.pack()
    for count in range(3*i+1, 3*i+4):
        button = tk.Button(
            num_frame,
            text = count,
            activeforeground = "blue",
            activebackground = "pink",
            width = "13",
            command = lambda : entry.insert("end", count)
        )
        button.grid(row = i, column = count)

完整代码见 每次点击按钮时,输入框中始终显示数字9。这是因为循环结束后变量count的值固定为9,而按钮命令中直接引用了该变量,导致所有按钮点击后都插入相同的count值。定位到问题根源后,笔者尝试寻找解决方案。曾尝试将每个实例化的Button对象存入列表或字典,但仍无法正确获取对应的索引及按钮文本。

解决方法

借助搜索引擎,笔者找到了解决思路:自定义一个Button类。

具体实现代码如下


import tkinter
class myButton():
    def __init__(self, frame, text, entry, **kwargs):
        side = kwargs.get('side') if 'side' in kwargs else ()
        self.btn = tkinter.Button(
            frame,
            text = text,
            activeforeground="blue",
            activebackground="pink",
            width="13",
            command=lambda :entry.insert("end", text)
        )
        if side:
            self.btn.grid(row=side[0], column=side[1])
        else:
            self.btn.pack()

参数说明

  • frame:Frame对象,用于指定按钮所在的父容器。
  • text:字符串或数字,既作为按钮上显示的标签,也作为点击按钮时希望获取的值。
  • entry:Entry对象,用于指定点击按钮后文本显示的目标输入框。
    • kwargs:包含side等额外参数。
  • side:元组,用于设置按钮在网格中的位置坐标。

通过实例化myButton对象,即可创建出能够正确获取按钮文本的自定义按钮。

以下是数字按钮的生成示例


for i in range(4):
    num_frame = tk.Frame(major_frame)
    num_frame.pack()
    if i < 3:
        for count in range(3*i+1, 3*i+4):
            myButton(num_frame, count, word_entry, side=(i, count))
        continue
    myButton(num_frame, 0, word_entry, side=(i, 0))

运行效果如图

 

至此,关于Python Tkinter中获取按钮文本值的介绍结束。更多相关Tkinter按钮操作内容,欢迎查阅本站往期文章或继续浏览后续教程,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。