解决Tkinter中button按钮未按却主动执行command函数的问题


Posted in Python onMay 23, 2021

在使用Tkinter做界面时,遇到这样一个问题:

程序刚运行,尚未按下按钮,但按钮的响应函数却已经运行了

例如下面的程序:

from Tkinter import *
class App:
 def __init__(self,master):
  frame = Frame(master)
  frame.pack()
  Button(frame,text='1', command = self.click_button(1)).grid(row=0,column=0)
  Button(frame,text='2', command = self.click_button(2)).grid(row=0,column=1)
  Button(frame,text='3', command = self.click_button(1)).grid(row=0,column=2)
  Button(frame,text='4', command = self.click_button(2)).grid(row=1,column=0)
  Button(frame,text='5', command = self.click_button(1)).grid(row=1,column=1)
  Button(frame,text='6', command = self.click_button(2)).grid(row=1,column=2)
 def click_button(self,n):
  print 'you clicked :',n
  
root=Tk()
app=App(root)
root.mainloop()

程序刚一运行,就出现下面情况:

解决Tkinter中button按钮未按却主动执行command函数的问题

六个按钮都没有按下,但是command函数却已经运行了

后来通过网上查找,发现问题原因是command函数带有参数造成的

tkinter要求由按钮(或者其它的插件)触发的控制器函数不能含有参数

若要给函数传递参数,需要在函数前添加lambda。

原程序可改为:

from Tkinter import *
class App:
 def __init__(self,master):
  frame = Frame(master)
  frame.pack()
  Button(frame,text='1', command = lambda: self.click_button(1)).grid(row=0,column=0)
  Button(frame,text='2', command = lambda: self.click_button(2)).grid(row=0,column=1)
  Button(frame,text='3', command = lambda: self.click_button(1)).grid(row=0,column=2)
  Button(frame,text='4', command = lambda: self.click_button(2)).grid(row=1,column=0)
  Button(frame,text='5', command = lambda: self.click_button(1)).grid(row=1,column=1)
  Button(frame,text='6', command = lambda: self.click_button(2)).grid(row=1,column=2)
 def click_button(self,n):
  print 'you clicked :',n  
root=Tk()
app=App(root)
root.mainloop()

补充:Tkinter Button按钮组件调用一个传入参数的函数

这里我们要使用python的lambda函数,lambda是创建一个匿名函数,冒号前是传入参数,后面是一个处理传入参数的单行表达式。

调用lambda函数返回表达式的结果。

首先让我们创建一个函数fun(x):

def fun(x):
    print x

随后让我们创建一个Button:(这里省略了调用Tkinter的一系列代码,只写重要部分)

Button(root, text='Button', command=lambda :fun(x))

下面让我们创建一个变量x=1:

x = 1

最后点击这个Button,就会打印出 1了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
在cmd命令行里进入和退出Python程序的方法
May 12 Python
Linux 修改Python命令的方法示例
Dec 03 Python
Linux下Pycharm、Anaconda环境配置及使用踩坑
Dec 19 Python
Python企业编码生成系统之主程序模块设计详解
Jul 26 Python
详解基于python的多张不同宽高图片拼接成大图
Sep 26 Python
Python的缺点和劣势分析
Nov 19 Python
python os.path.isfile()因参数问题判断错误的解决
Nov 29 Python
Django权限设置及验证方式
May 13 Python
Python基于pandas绘制散点图矩阵代码实例
Jun 04 Python
pytorch查看模型weight与grad方式
Jun 24 Python
python Matplotlib数据可视化(2):详解三大容器对象与常用设置
Sep 30 Python
教你如何使用Python开发一个钉钉群应答机器人
Jun 21 Python
python tkinter Entry控件的焦点移动操作
May 22 #Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 #Python
tensorboard 可视化之localhost:6006不显示的解决方案
pytorch训练神经网络爆内存的解决方案
粗暴解决CUDA out of memory的问题
May 22 #Python
pytorch中的model.eval()和BN层的使用
May 22 #Python
解决Pytorch中关于model.eval的问题
You might like
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
解析Linux下Varnish缓存的配置优化
2013/06/20 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
2016/05/19 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php中10个不同等级压缩优化图片操作示例
2016/11/14 PHP
JS date对象的减法处理实现代码
2010/12/28 Javascript
jQuery Ajax 实例全解析
2011/04/20 Javascript
如何使用Jquery获取Form表单中被选中的radio值
2013/08/09 Javascript
js/jquery判断浏览器类型的方法小结
2015/05/12 Javascript
js同源策略详解
2015/05/21 Javascript
js图片翻书效果代码分享
2015/08/20 Javascript
使用CDN和AJAX加速WordPress中jQuery的加载
2015/12/05 Javascript
javascript返回顶部的按钮实现方法
2016/01/09 Javascript
JavaScript中的this,call,apply使用及区别详解
2016/01/29 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python 爬虫学习笔记之正则表达式
2016/09/21 Python
Python函数参数操作详解
2018/08/03 Python
20行python代码的入门级小游戏的详解
2019/05/05 Python
Flask框架单例模式实现方法详解
2019/07/31 Python
查看Python依赖包及其版本号信息的方法
2019/08/13 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
2021/03/03 Python
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
英国100%防污和防水的靴子:Muck Boot Company
2020/09/08 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
护理专业求职信
2014/06/15 职场文书
化学工程专业求职信
2014/08/10 职场文书
新疆民族团结演讲稿
2014/08/27 职场文书
老龙头导游词
2015/02/11 职场文书
春节慰问信范文
2015/02/15 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
Redis性能监控的实现
2021/07/09 Redis
Mysql 8.x 创建用户以及授予权限的操作记录
2022/04/18 MySQL