Python:Tkinter-command 和 bind

 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中函数名表示的啥啊?)

猜你喜欢

转载自blog.csdn.net/weixin_41738417/article/details/81539901