Python:Tkinter-command 和 bind

本文探讨了Python GUI库Tkinter中Button组件的command选项及bind方法的使用技巧。通过对比command与bind的不同应用场景,解释了如何正确设置按钮点击事件响应函数,并提供了参数传递的方法。

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

 Tkinter中command和bind都可以作为触发callback函数的方法,二者弄得多了,有点分不清,而且command可以和lambda结合使用,有时忘了该是使用command=callback还是command=callback(),都是C语言惹的祸~~~
******************************************************************************************
(1)command
    command是Button中的option项,可以指定点击button时调用的callback函数
==============================================================================
下面是一种显而易见的写法:
Python:Tkinter-command <wbr>和 <wbr>bind
但是结果很出人意料,运行时直接把tkMessageBox弹出来了,而且关闭tkMessageBox窗口之后,再点击button没有反应,所以这个方法是错误的
Python:Tkinter-command <wbr>和 <wbr>bind
这里我不理解是为什么???
===================================================================================
下面是类似C语言的写法:
Python:Tkinter-command <wbr>和 <wbr>bind
对比第21排的差异就可以了,command=callback,传递的是函数名,和C语言类似,但C语言这种情况,callback一般都是一个函数的指针,结果很正常:
Python:Tkinter-command <wbr>和 <wbr>bind
点击Enter之后如下
Python:Tkinter-command <wbr>和 <wbr>bind
=====================================================================================
下面是使用lambda的情况
Python:Tkinter-command <wbr>和 <wbr>bind
上面是可以显示正确的结果的,但是使用command=lambda:callback就不行
======================================================================================
书上关于command的讲解太少了,这里我只能知其然,而不能知其所以然了,不过可以总结使用方法如下:
(1)如果callback不需要传递参数,则command=callback 和 command=lambda:callback()两种形式都可以
(2)如果callback需要传递参数,那么只能使用command=lambda:callback(argv..)
******************************************************************************************************
(2)bind
    bind的应用比command广泛很多,任何widget都可以和某些events进行绑定,下面的这篇文章中详细描述过:
http://blog.sina.com.cn/s/blog_ac9fdc0b0101n642.html
这里只说明bind的用法,主要是看清它和bind的区别,下面是利用bind实现和上面一样的功能:
Python:Tkinter-command <wbr>和 <wbr>bind
这是它的标准用法,函数声明中需要有参数event,这点和UNIX编程中的signal函数很像,signal只能传入一个参数,所以除了使用全局变量,没有办法传入参数。bind好像也没找到很好的传入参数的办法,使用类型封装貌似勉强能做到,如下:
Python:Tkinter-command <wbr>和 <wbr>bind
==========================================================================================
bind的使用形式只有一种:widget.bind("", callback),注意木有括号(话说python中函数名表示的啥啊?)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值