python延迟函数调用

时间:2015-12-16 15:18:48

标签: python function tkinter delay

我想延迟一个函数调用。 (或者在我看来:python以错误的顺序执行函数)。在下面的例子中,我可以编写两个函数bf1和bf2来代替bf(arg),并且它可以按预期工作:只要按下按钮就会调用该函数。但是如果我在函数中包含参数,则函数调用只执行一次。返回函数本身并不会改变行为。

请你看看它,并给我一个暗示我对python的逻辑或理解是错误的。

from tkinter import *
def bf(str):
    print(str)
    # return print(str)  #alternative(same behaviour)

main=Tk(screenName='screen',baseName='base')
button1=Button(master=main,text='b1',command=bf("b1"))
button2=Button(master=main,text='b2',command=bf("b2")) # runs once (and runs here)
button1.pack()
button2.pack()
mainloop()
print('end')

- google和stackoverflow搜索只返回延迟函数调用1之类的特定时间间隔这不是我要搜索的内容。 : - (

2 个答案:

答案 0 :(得分:7)

问题在于您在创建按钮时调用该函数,而不是传递TK将在单击按钮时调用的可调用。通常你只需要传递函数:

button1=Button(master=main, text='b1', command=bf)

但是因为你想将参数传递给bf,你需要将它包装在lambda中:

button1=Button(master=main, text='b1', command=lambda: bf('b1'))

答案 1 :(得分:2)

你在这一行中做的是你没有通过该功能但是执行它:

button1=Button(master=main,text='b1',command=bf("b1"))

您可以只包含函数名称,但不能将参数传递给函数:

button1=Button(master=main,text='b1',command=bf)

或者你可以使用lambda:

button1=Button(master=main,text='b1',command=lambda:bf("B1"))