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

时间:2025-04-10 07:54:23

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:

(text=str)

root = ()

('200x100')

lb = (root, text='12345')

()

tstr = 'I\'m from Button command'

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

()

()

请看高亮的那一行,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:

(text=str)

root = ()

('200x100')

lb = (root, text='12345')

()

tstr = 'I\'m from Button command'

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

()

()

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

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

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

-- EOF --