解决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 31 Python
实例Python处理XML文件的方法
Aug 31 Python
python在不同层级目录import模块的方法
Jan 31 Python
python中urllib.unquote乱码的原因与解决方法
Apr 24 Python
Python使用回溯法子集树模板解决爬楼梯问题示例
Sep 08 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
Python Flask框架扩展操作示例
May 03 Python
django-rest-swagger的优化使用方法
Aug 29 Python
pyCharm 实现关闭代码检查
Jun 09 Python
Python通过getattr函数获取对象的属性值
Oct 16 Python
Python中zipfile压缩包模块的使用
May 14 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
Thinkphp无限级分类代码
2015/11/11 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
Javascript面向对象设计一 工厂模式
2011/12/20 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
JQuery选择器、过滤器大整理
2015/05/26 Javascript
jQuery实现鼠标悬停背景翻转的黑色导航菜单代码
2015/09/14 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
jQuery实用技巧必备(中)
2015/11/03 Javascript
详解Javascript中的Object对象
2016/02/28 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
微信小程序 解决swiper不显示图片的方法
2017/01/04 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
JS面试题中深拷贝的实现讲解
2020/05/07 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
Python开发如何在ubuntu 15.10 上配置vim
2016/01/25 Python
Python3计算三角形的面积代码
2017/12/18 Python
django表单实现下拉框的示例讲解
2018/05/29 Python
python文本数据处理学习笔记详解
2019/06/17 Python
对python特殊函数 __call__()的使用详解
2019/07/02 Python
Python 3 判断2个字典相同
2019/08/06 Python
Python 绘制可视化折线图
2020/07/22 Python
使用CSS3实现SVG路径描边动画效果入门教程
2019/10/21 HTML / CSS
英国灯具和灯泡网上商店:Lights.co.uk
2018/02/02 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
在职人员函授期间自我评价分享
2013/11/08 职场文书
业务部门经理岗位职责
2014/02/23 职场文书
文明村镇申报材料
2014/05/06 职场文书
写给女朋友的保证书
2015/05/09 职场文书
教你漂亮打印Pandas DataFrames和Series
2021/05/29 Python