解决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操作json数据的一个简单例子
Apr 17 Python
Python中的Numpy入门教程
Apr 26 Python
python显示生日是星期几的方法
May 27 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
基于Django与ajax之间的json传输方法
May 29 Python
python使用pygame框架实现推箱子游戏
Nov 20 Python
Python类的继承、多态及获取对象信息操作详解
Feb 28 Python
python3 tkinter实现点击一个按钮跳出另一个窗口的方法
Jun 13 Python
python爬取王者荣耀全皮肤的简单实现代码
Jan 31 Python
python线程里哪种模块比较适合
Aug 02 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
Dec 08 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
11个PHP 分页脚本推荐
2011/08/15 PHP
php+mysql实现简单的增删改查功能
2015/07/13 PHP
修复ShopNC使用QQ 互联时提示100010 错误
2015/11/08 PHP
PHP使用栈解决约瑟夫环问题算法示例
2017/08/27 PHP
Jquery cookie操作代码
2010/03/14 Javascript
Javascript 面向对象 命名空间
2010/05/13 Javascript
javascript jq 弹出层实例
2013/08/25 Javascript
jquery实现的蓝色二级导航条效果代码
2015/08/24 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
JavaScript随机生成颜色的方法
2016/10/15 Javascript
BootStrap的两种模态框方式
2017/05/10 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
Vue+Element-U实现分页显示效果
2020/11/15 Javascript
Python简单获取自身外网IP的方法
2016/09/18 Python
python 环境变量和import模块导入方法(详解)
2017/07/11 Python
pyqt5简介及安装方法介绍
2018/01/31 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Python装饰器模式定义与用法分析
2018/08/06 Python
python如何实现复制目录到指定目录
2020/02/13 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
Pycharm Git 设置方法
2020/09/15 Python
Python web框架(django,flask)实现mysql数据库读写分离的示例
2020/11/18 Python
python opencv角点检测连线功能的实现代码
2020/11/24 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
英国健身仓库:Bodybuilding Warehouse
2019/03/06 全球购物
凌阳科技股份有限公司C++程序员面试题笔试题
2014/11/20 面试题
硅酸盐工业控制专业应届生求职信
2013/11/02 职场文书
护士在校生自荐信
2014/02/01 职场文书
党支部书记岗位责任制
2014/02/11 职场文书
保险公司早会主持词
2014/03/22 职场文书
党员干部对十八届四中全会的期盼
2014/10/17 职场文书
毕业设计论文致谢词
2015/05/14 职场文书
德劲DE1108畅想
2021/04/22 无线电
JavaScript如何利用Promise控制并发请求个数
2021/05/14 Javascript
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server