解决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 相关文章推荐
分析python服务器拒绝服务攻击代码
Jan 16 Python
web.py获取上传文件名的正确方法
Aug 26 Python
Python脚本实现虾米网签到功能
Apr 12 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
Sep 11 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
Mar 19 Python
python实现自动登录
Sep 17 Python
Python依赖包整体迁移方法详解
Aug 15 Python
python实现KNN分类算法
Oct 16 Python
详解使用django-mama-cas快速搭建CAS服务的实现
Oct 30 Python
Python爬虫如何应对Cloudflare邮箱加密
Jun 24 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
selenium自动化测试入门实战
Dec 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自动加载机制的深入分析
2013/06/08 PHP
php cookie中点号(句号)自动转为下划线问题
2014/10/21 PHP
php关闭warning问题的解决方法
2016/05/17 PHP
php求斐波那契数的两种实现方式【递归与递推】
2019/09/09 PHP
详细分析PHP 命名空间(namespace)
2020/06/30 PHP
js文件中调用js的实现方法小结
2009/10/23 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
json对象转为字符串,当做参数传递时加密解密的实现方法
2016/06/29 Javascript
jQuery+Pdo编写login登陆界面
2016/08/01 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
angular ng-repeat数组中的数组实例
2017/02/18 Javascript
jQuery树控件zTree使用方法详解(一)
2017/02/28 Javascript
详解vue 配合vue-resource调用接口获取数据
2017/06/22 Javascript
react-native 圆弧拖动进度条实现的示例代码
2018/04/12 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
小程序实现层叠卡片滑动效果
2019/08/26 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
介绍Python的@property装饰器的用法
2015/04/28 Python
Python闭包实现计数器的方法
2015/05/05 Python
解读Python中degrees()方法的使用
2015/05/18 Python
简单介绍Python中的decode()方法的使用
2015/05/18 Python
DataFrame 将某列数据转为数组的方法
2018/04/13 Python
Python人脸识别第三方库face_recognition接口说明文档
2019/05/03 Python
django基于cors解决跨域请求问题详解
2019/08/06 Python
在Mac中配置Python虚拟环境过程解析
2020/06/22 Python
python 如何将office文件转换为PDF
2020/09/22 Python
python os.rename实例用法详解
2020/12/06 Python
几个数据库方面的面试题
2016/07/01 面试题
航空大学应届生求职信
2013/11/10 职场文书
大学信息公开实施方案
2014/03/09 职场文书
小学教师教学反思
2016/02/24 职场文书
浅谈Python数学建模之数据导入
2021/06/23 Python
SQL SERVER中的流程控制语句
2022/05/25 SQL Server
python pandas 解析(读取、写入)CSV 文件的操作方法
2022/12/24 Python