python按钮调用函数_如何在Button的command中传递参数?

这篇博客介绍了在Python的tkinter GUI库中,如何正确地在Button的command参数中传递参数。错误的做法是直接调用函数并传递参数,这会导致函数在创建Button时执行,而不是在点击时。正确的做法是使用lambda匿名函数来调用目标函数并传递参数。示例代码展示了如何修改错误的写法,以实现在点击按钮后更新Label内容的功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

tkinter是Python官方自带的GUI框架,简单好用,其中最常用的恐怕就是Button控件了。这个控件就是在GUI上显示一个按钮,用户点击后,除法command参数所对应的函数。不过,这里有一个很多人都在咨询的问题,如何在Button控件的command中传递参数?

错误的传参写法

下面这段代码,希望实现的功能,是点击clickme按钮后,能够将tstr变量中的字符串在Label中显示出来。

import tkinter as tk

def bn_cmd(str=None):

if str is not None:

lb.config(text=str)

root = tk.Tk()

root.geometry('200x100')

lb = tk.Label(root, text='12345')

lb.grid()

tstr = 'I\'m from Button command'

bn = tk.Button(root, text='clickme', command=bn_cmd(tstr))

bn.grid()

root.mainloop()

请看高亮的那一行,Button的command参数,等于bn_cmd(tstr),这种写法是错的!

这种写法,在这段代码载入的时候,bn_cmd函数就被执行了,Label的显示已经被更新,而command这个参数,实际上值为None,因为bn_cmd函数执行没有返回值,在Python中,等同于return None。待这段程序运行起来,点击GUI界面中的clickme按钮,实际上不会有任何效果!!

正确的传参方法

正确的在Button的command中传递参数的方法,是使用lambda匿名函数。代码修改成下面这样,实际上只修改了高亮的那一行:

import tkinter as tk

def bn_cmd(str=None):

if str is not None:

lb.config(text=str)

root = tk.Tk()

root.geometry('200x100')

lb = tk.Label(root, text='12345')

lb.grid()

tstr = 'I\'m from Button command'

bn = tk.Button(root, text='clickme', command=lambda:bn_cmd(tstr))

bn.grid()

root.mainloop()

这样的写法,就实现了界面初始显示12345,点击clickme按钮后,变成tstr变量的内容,而tstr变量,是通过参数的方式传递近bn_cmd函数的。

这种写法,command指向一个匿名函数,这个匿名函数就是调用bn_cmd函数,并且制定了tstr这个参数。这种方式就实现了Button控件command中传递参数。

就不截图了,新建一个文件,copy上面这段代码,用python执行,就能看到效果command传参的效果。

-- EOF --

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值