解决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中pygame的mouse鼠标事件用法实例
Nov 11 Python
常用python编程模板汇总
Feb 12 Python
Python实现excel转sqlite的方法
Jul 17 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
Aug 30 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Python+PyQT5的子线程更新UI界面的实例
Jun 14 Python
Python 共享变量加锁、释放详解
Aug 28 Python
使用Python三角函数公式计算三角形的夹角案例
Apr 15 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
python3实现语音转文字(语音识别)和文字转语音(语音合成)
Oct 14 Python
python爬取抖音视频的实例分析
Jan 19 Python
python中24小时制转换为12小时制的方法
Jun 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/11/19 PHP
PHPMyadmin 配置文件详解(配置)
2009/12/03 PHP
PHP使用数组依次替换字符串中匹配项
2016/01/08 PHP
PHP高并发和大流量解决方案整理
2019/12/24 PHP
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
ie中js创建checkbox默认选中问题探讨
2013/10/21 Javascript
简单的js图片轮换代码(js图片轮播)
2014/05/06 Javascript
浅谈js中的延迟执行和定时执行
2016/05/31 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
收藏AngularJS中最重要的核心功能
2017/07/09 Javascript
一个简易时钟效果js实现代码
2020/03/25 Javascript
vue-cli下的vuex的简单Demo图解(实现加1减1操作)
2018/02/26 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
Flutter 超实用简单菜单弹出框 PopupMenuButton功能
2019/08/06 Javascript
详解vuex数据传输的两种方式及this.$store undefined的解决办法
2019/08/26 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
CentOS6.5设置Django开发环境
2016/10/13 Python
python try except 捕获所有异常的实例
2018/10/18 Python
python中退出多层循环的方法
2018/11/27 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
python使用time、datetime返回工作日列表实例代码
2019/05/09 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Python简易计算器制作方法代码详解
2019/10/31 Python
python实现感知机模型的示例
2020/09/30 Python
python 爬虫请求模块requests详解
2020/12/04 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
施工安全协议书范本
2014/09/26 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
总经理助理岗位职责
2015/01/31 职场文书
股东大会通知
2015/04/24 职场文书
民事调解书范文
2015/05/20 职场文书
《刺客之王:C罗全景传记》:时代从来不会亏待手艺人
2019/11/28 职场文书
使用Redis做预定库存缓存功能
2022/04/02 Redis
SqlServer常用函数及时间处理小结
2023/05/08 SQL Server