解决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网络爬虫采集联想词示例
Feb 11 Python
Python中文竖排显示的方法
Jul 28 Python
python3实现暴力穷举博客园密码
Jun 19 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
Python3 元组tuple入门基础
Feb 09 Python
Python sep参数使用方法详解
Feb 12 Python
Pytest mark使用实例及原理解析
Feb 22 Python
使用Python文件读写,自定义分隔符(custom delimiter)
Jul 05 Python
Python分类测试代码实例汇总
Jul 23 Python
如何在pycharm中快捷安装pip命令(如pygame)
May 31 Python
Python中rapidjson参数校验实现
Jul 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 5.3新增魔术方法__invoke概述
2014/07/23 PHP
Laravel 5.3 学习笔记之 安装
2016/08/28 PHP
基于php编程规范(详解)
2017/08/17 PHP
tp5.1 框架数据库高级查询技巧实例总结
2020/05/25 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
2020/05/29 PHP
JavaScript内核之基本概念
2011/10/21 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
2013/03/01 Javascript
JS格式化数字金额用逗号隔开保留两位小数
2013/10/18 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
jquery判断复选框选中状态以及区分attr和prop
2015/12/18 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
vue.js从安装到搭建过程详解
2017/03/17 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
AngularJS实现的base64编码与解码功能示例
2018/05/17 Javascript
JavaScript代理模式原理与用法实例详解
2020/03/10 Javascript
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
如何在sae中设置django,让sae的工作环境跟本地python环境一致
2017/11/21 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
用Python实现数据的透视表的方法
2018/11/16 Python
五分钟带你搞懂python 迭代器与生成器
2020/08/30 Python
Python使用pyenv实现多环境管理
2021/02/05 Python
css3+jq创作含苞待放的荷花
2014/02/20 HTML / CSS
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
全球500多个机场的接送服务:Suntransfers
2019/06/03 全球购物
实习鉴定范文
2013/12/19 职场文书
个人评价范文分享
2014/01/11 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
公证委托书
2014/08/01 职场文书
2014年质检工作总结
2014/11/26 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
幼儿园见习总结
2015/06/23 职场文书
运动会通讯稿600字
2015/07/20 职场文书
医疗纠纷调解协议书
2015/08/06 职场文书
24句精辟的现实社会语录,句句扎心,道尽人性
2019/08/29 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang