解决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实现对比不同字体中的同一字符的显示效果
Apr 23 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
Python3实现Web网页图片下载
Jan 28 Python
Python验证文件是否可读写代码分享
Dec 11 Python
Numpy中转置transpose、T和swapaxes的实例讲解
Apr 17 Python
pandas去重复行并分类汇总的实现方法
Jan 29 Python
python将pandas datarame保存为txt文件的实例
Feb 12 Python
python新式类和经典类的区别实例分析
Mar 23 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
Apr 20 Python
Python转换字典成为对象,可以用"."方式访问对象属性实例
May 11 Python
Spring @Enable模块驱动原理及使用实例
Jun 23 Python
python中pow函数用法及功能说明
Dec 04 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
推荐十款免费 WordPress 插件
2015/03/24 PHP
PHP从尾到头打印链表实例讲解
2018/09/27 PHP
PHP http请求超时问题解决方案
2020/11/13 PHP
JS 巧妙获取剪贴板数据 Excel数据的粘贴
2009/07/09 Javascript
jQuery html() in Firefox (uses .innerHTML) ignores DOM changes
2010/03/05 Javascript
jQuery-ui中自动完成实现方法
2010/06/10 Javascript
悬浮数字的实现案例
2014/02/19 Javascript
jquery中ajax函数执行顺序问题之如何设置同步
2014/02/28 Javascript
jQuery实现的支持IE的html滑动条
2015/03/16 Javascript
JavaScript File API文件上传预览
2016/02/02 Javascript
jQuery插件ImgAreaSelect实现头像上传预览和裁剪功能实例讲解一
2017/05/26 jQuery
vue实现自定义日期组件功能的实例代码
2018/11/06 Javascript
Vue实现点击显示不同图片的效果
2019/08/10 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
JavaScript获取当前url路径过程解析
2019/12/27 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
[00:39]DOTA2上海特级锦标赛 Liquid战队宣传片
2016/03/04 DOTA
python多重继承新算法C3介绍
2014/09/28 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
Python基础语言学习笔记总结(精华)
2017/11/14 Python
通过 Django Pagination 实现简单分页功能
2019/11/11 Python
python之pymysql模块简单应用示例代码
2019/12/16 Python
Python django框架开发发布会签到系统(web开发)
2020/02/12 Python
pycharm配置安装autopep8自动规范代码的实现
2021/03/02 Python
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
REISS美国官网:伦敦最受欢迎的时尚品牌
2019/08/16 全球购物
人力资源专员自我评价怎么写
2013/09/19 职场文书
物流专业大学生的自我鉴定
2013/11/13 职场文书
会计实习生自我鉴定
2013/12/12 职场文书
党员干部公开承诺书
2014/03/26 职场文书
父母对孩子的寄语
2014/04/09 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
投标承诺函格式
2015/01/21 职场文书
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers
html,css,javascript是怎样变成页面的
2023/05/07 HTML / CSS