高防服务器

怎么解决Tkinter中button按钮未按却主动执行command函数


怎么解决Tkinter中button按钮未按却主动执行command函数

发布时间:2022-02-24 17:51:48 来源:高防服务器网 阅读:57 作者:iii 栏目:开发技术

本文小编为大家详细介绍“怎么解决Tkinter中button按钮未按却主动执行command函数”,内容详细,步骤清晰,细节处理妥当,希望这篇“怎么解决Tkinter中button按钮未按却主动执行command函数”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

前言

在使用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()

程序刚一运行,就出现下面情况:

六个按钮都没有按下,但是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了。

读到这里,这篇“怎么解决Tkinter中button按钮未按却主动执行command函数”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注高防服务器网行业资讯频道。

[微信提示:高防服务器能助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

[图文来源于网络,不代表本站立场,如有侵权,请联系高防服务器网删除]
[