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 --