解决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中in在list和dict中查找效率的对比分析
May 04 Python
在cmd命令行里进入和退出Python程序的方法
May 12 Python
转换科学计数法的数值字符串为decimal类型的方法
Jul 16 Python
python的中异常处理机制
Aug 30 Python
python实现自动获取IP并发送到邮箱
Dec 26 Python
Python编译成.so文件进行加密后调用的实现
Dec 23 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
jupyter notebook中美观显示矩阵实例
Apr 17 Python
python安装读取grib库总结(推荐)
Jun 24 Python
Python过滤序列元素的方法
Jul 31 Python
Pytorch之Tensor和Numpy之间的转换的实现方法
Sep 03 Python
python爬虫框架feapde的使用简介
Apr 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虚拟主机概念及如何选择稳定的PHP虚拟主机
2018/11/20 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
JavaScript 操作键盘的Enter事件(键盘任何事件),兼容多浏览器
2010/10/11 Javascript
面向对象的Javascript之一(初识Javascript)
2012/01/20 Javascript
windows系统下简单nodejs安装及环境配置
2013/01/08 NodeJs
一个简单的jquery进度条示例
2014/04/28 Javascript
js实现浏览器窗口大小被改变时触发事件的方法
2015/02/02 Javascript
基于JavaScript实现弹出框效果
2016/02/19 Javascript
AngularJS Bootstrap详细介绍及实例代码
2016/07/28 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
Ajax异步文件上传与NodeJS express服务端处理
2017/04/01 NodeJs
JS自定义函数实现时间戳转换成date的方法示例
2017/08/27 Javascript
vue中实现methods一个方法调用另外一个方法
2018/02/08 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
使用 js 简单的实现 bind、call 、aplly代码实例
2019/09/07 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
解决Antd Table组件表头不对齐的问题
2020/10/27 Javascript
python绘图方法实例入门
2015/05/19 Python
Django实战之用户认证(用户登录与注销)
2018/07/16 Python
Python实现使用request模块下载图片demo示例
2019/05/24 Python
python实现XML解析的方法解析
2019/11/16 Python
浅析python表达式4+0.5值的数据类型
2020/02/26 Python
Python logging模块写入中文出现乱码
2020/05/21 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
行政经理岗位职责
2013/11/09 职场文书
实习教师自我鉴定
2013/12/12 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
大学应届毕业生求职信
2014/05/24 职场文书
学习群众路线的心得体会
2014/11/05 职场文书
自主招生自荐信怎么写
2015/03/24 职场文书
清明节文明祭祀倡议书
2015/04/28 职场文书
Mysql MVCC机制原理详解
2021/04/20 MySQL
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python