我正在尝试将函数绑定到按钮,因此只有在单击按钮时才会调用它。我知道可以使用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()
答案 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()
请注意,您的代码需要清理。