解决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根据出生年份简单计算生肖的方法
Mar 27 Python
python清除指定目录内所有文件中script的方法
Jun 30 Python
使用Python从零开始撸一个区块链
Mar 14 Python
python素数筛选法浅析
Mar 19 Python
python实现在pandas.DataFrame添加一行
Apr 04 Python
Python基于百度AI的文字识别的示例
Apr 21 Python
python3+opencv3识别图片中的物体并截取的方法
Dec 05 Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 Python
Win10下Python3.7.3安装教程图解
Jul 08 Python
Python SELENIUM上传文件或图片实现过程
Oct 28 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
May 07 Python
基于Python实现流星雨效果的绘制
Mar 18 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相关资料
2006/10/09 PHP
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
解析PHP自带的进位制之间的转换函数
2013/06/08 PHP
php使用pack处理二进制文件的方法
2014/07/03 PHP
PHP生成器简单实例
2015/05/13 PHP
PHP实现的超长文本分页显示功能示例
2018/06/04 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
使用javascript访问XML数据的实例
2006/12/27 Javascript
JavaScript 闭包在封装函数时的简单分析
2009/11/28 Javascript
推荐20家国外的脚本下载网站
2011/04/28 Javascript
jQuery滚动加载图片效果的实现
2013/03/06 Javascript
javascript实例分享---具有立体效果的图片特效
2014/06/08 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
javaScript事件学习小结(四)event的公共成员(属性和方法)
2016/06/09 Javascript
微信小程序 绘图之饼图实现
2016/10/24 Javascript
JS数组去重(4种方法)
2017/03/27 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
浅谈小程序 setData学问多
2019/02/20 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
layui的表单验证支持ajax判断用户名是否重复的实例
2019/09/06 Javascript
vue实现点击按钮切换背景颜色的示例代码
2020/06/23 Javascript
python中尾递归用法实例详解
2015/04/28 Python
Python3实现的Mysql数据库操作封装类
2018/06/06 Python
Python使用logging模块实现打印log到指定文件的方法
2018/09/05 Python
python实践项目之监控当前联网状态详情
2019/05/23 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
Python reversed反转序列并生成可迭代对象
2020/10/22 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
波兰最早的运动鞋精品店之一:Street Supply
2019/08/29 全球购物
函授大专自我鉴定
2013/11/01 职场文书
优秀应届毕业生自荐信
2013/11/16 职场文书
党建工作整改措施
2014/10/28 职场文书
开展党的群众路线教育实践活动个人对照检查材料
2014/11/05 职场文书
幼儿园2014年度工作总结
2014/11/10 职场文书
环境建议书
2015/02/04 职场文书
2016优秀毕业生个人事迹材料
2016/02/29 职场文书