python绑定函数到一个按钮

时间:2017-12-17 12:58:32

标签: python user-interface tkinter lambda binding

我正在尝试将函数绑定到按钮,因此只有在单击按钮时才会调用它。我知道可以使用lambda,但问题是我必须通过函数传递变量,因此我不能使用lambda。

下面的代码尝试使用按钮的绑定方法,但这是出于直觉而且无法正常工作:

from tkinter import *

root = Tk()

variable = StringVar()

entry = Entry(root, textvariable=variable, width=10)

entry.pack()

def print_something(event, n):

     print(n) # I know it is supposed to be indented ;)

btn = Button(root, text='print something')

btn.bind('<Button-1>', print_something(variable))

btn.pack()

root.mainloop()

1 个答案:

答案 0 :(得分:0)

如果我理解您的问题,那么您正在寻找一种方法来使用lambda表达式。以下是步骤:

通过编码variable

Set variable.set(2)的值

从该函数中删除事件参数。

Get使用代码函数打印的值作为按钮方法的回调:

有约束力:

修改您的btn代码,如下所示:

btn.bind('<Button-1>', lambda a: print_something(variable.get()))

代码:

from tkinter import *

root = Tk()
variable = StringVar()
variable.set(2)
entry = Entry(root, textvariable=variable, width=10)
entry.pack()
def print_something(n):
     print(n) 
btn = Button(root, text='print something')
btn.bind('<Button-1>', lambda a: print_something(variable.get()))
btn.pack()
root.mainloop()

没有约束力:

修改您的btn代码,如下所示:

btn = Button(root, text='print something', command=lambda: print_something(variable.get()))

这就是我的意思:

from tkinter import *

root = Tk()
variable = StringVar()
variable.set(2)
entry = Entry(root, textvariable=variable, width=10)
entry.pack()
def print_something(n):
     print(n) 
btn = Button(root, text='print something', command=lambda: print_something(variable.get()))
btn.pack()
root.mainloop()

请注意,您的代码需要清理。