解决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的Bottle框架中获取制定cookie的教程
Apr 24 Python
python实现在IDLE中输入多行的方法
Apr 19 Python
python实现多人聊天室
Mar 31 Python
使用PyQt4 设置TextEdit背景的方法
Jun 14 Python
Python中字符串List按照长度排序
Jul 01 Python
pycharm新建一个python工程步骤
Jul 16 Python
python  文件的基本操作 菜中菜功能的实例代码
Jul 17 Python
解决python 找不到module的问题
Feb 12 Python
python numpy库linspace相同间隔采样的实现
Feb 25 Python
Python3内置函数chr和ord实现进制转换
Jun 05 Python
python中常见错误及解决方法
Jun 21 Python
Python机器学习之底层实现KNN
Jun 20 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函数解决SQL injection
2006/12/09 PHP
PHP 得到根目录的 __FILE__ 常量
2008/07/23 PHP
php 数组排序 array_multisort与uasort的区别
2011/03/24 PHP
PHP 获取文件路径(灵活应用__FILE__)
2013/02/15 PHP
php格式化日期和时间格式化示例分享
2014/02/24 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
彻底搞懂PHP 变量结构体
2017/10/11 PHP
javascript 设置文本框中焦点的位置
2009/11/20 Javascript
鼠标滑上去后图片放大浮出效果的js代码
2011/05/28 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
7个jQuery最佳实践
2016/01/12 Javascript
js学习阶段总结(必看篇)
2016/06/16 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
nodejs基础应用
2017/02/03 NodeJs
Bootstrap table 服务器端分页功能实现方法示例
2020/06/01 Javascript
[00:26]TI7不朽珍藏III——冥界亚龙不朽展示
2017/07/15 DOTA
python随机数分布random测试
2018/08/27 Python
详解django2中关于时间处理策略
2019/03/06 Python
django框架CSRF防护原理与用法分析
2019/07/22 Python
flask框架自定义过滤器示例【markdown文件读取和展示功能】
2019/11/08 Python
python3 dict ndarray 存成json,并保留原数据精度的实例
2019/12/06 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
Python unittest单元测试框架及断言方法
2020/04/15 Python
django queryset 去重 .distinct()说明
2020/05/19 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
松本清官方海外旗舰店:日本最大的药妆连锁店
2017/11/21 全球购物
什么是ESB?请介绍一下ESB?
2015/05/27 面试题
专业销售业务员求职信
2013/11/18 职场文书
物控部经理职务说明书
2014/02/25 职场文书
继承公证书样本
2014/04/04 职场文书
企业员工薪酬方案
2014/06/04 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
合作意向书范本
2019/04/17 职场文书
Python绘制地图神器folium的新人入门指南
2021/05/23 Python
mysql全面解析json/数组
2022/07/07 MySQL