解决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读取指定目录下指定后缀文件并保存为docx
Apr 23 Python
Python编写登陆接口的方法
Jul 10 Python
python 数据的清理行为实例详解
Jul 12 Python
flask入门之表单的实现
Jul 18 Python
对Python信号处理模块signal详解
Jan 09 Python
对Pycharm创建py文件时自定义头部模板的方法详解
Feb 12 Python
python实现矩阵打印
Mar 02 Python
Python3将数据保存为txt文件的方法
Sep 12 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
python实现简单井字棋游戏
Mar 04 Python
Python json解析库jsonpath原理及使用示例
Nov 25 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生成等比缩略图类和自定义函数分享
2014/06/25 PHP
javascript 密码强度验证规则、打分、验证(给出前端代码,后端代码可根据强度规则翻译)
2010/05/18 Javascript
javascript中最常用的继承模式 组合继承
2010/08/12 Javascript
jquery获取input的value问题说明
2010/08/19 Javascript
jQuery JSON的解析方式分享
2011/04/05 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
在表单提交前进行验证的几种方式整理
2013/07/31 Javascript
js/jquery判断浏览器的方法小结
2014/09/02 Javascript
jQuery实现类似淘宝网图片放大效果的方法
2015/07/08 Javascript
JS HTML5拖拽上传图片预览
2016/07/18 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
bootstrap fileinput组件整合Springmvc上传图片到本地磁盘
2017/05/11 Javascript
基于Vue.js 2.0实现百度搜索框效果
2020/12/28 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
浅谈Fetch 数据交互方式
2018/12/20 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
webpack + vue 打包生成公共配置文件(域名) 方便动态修改
2019/08/29 Javascript
js实现翻牌小游戏
2020/07/31 Javascript
Vue2.0 ES6语法降级ES5的操作
2020/10/30 Javascript
[04:02]DOTA2上海特锦赛小组赛第二日recap精彩回顾
2016/02/28 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
Python中多线程及程序锁浅析
2015/01/21 Python
使用Python生成url短链接的方法
2015/05/04 Python
Python检测网站链接是否已存在
2016/04/07 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
python实现将一个数组逆序输出的方法
2018/06/25 Python
python代数式括号有效性检验示例代码
2020/10/04 Python
python实现马丁策略回测3000只股票的实例代码
2021/01/22 Python
Canvas中设置width与height的问题浅析
2018/11/01 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
Tom Dixon官网:英国照明及家具设计和制造公司
2019/03/01 全球购物
什么是WEB控件?使用WEB控件有哪些优势?
2012/01/21 面试题
元旦红领巾广播稿
2014/02/19 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
安全生产标语口号
2015/12/26 职场文书
《中国机长》观后感:敬畏生命,敬畏职责
2019/11/12 职场文书