我需要在tkinter Button上使用tkinter回调设置一些变量。所以我可以说(在类定义中)
Button1 = Button(parentframe, text="set", command = self.setvar)
def setvar(self):
self.myvar = 7
有没有办法用内联(lambda)函数做到这一点,而不是用愚蠢的小回调搞乱事情?
command = lambda *args: something?
答案 0 :(得分:1)
你可以这样做:
command = lambda: setattr(self, 'myvar', 7)
答案 1 :(得分:1)
你可以使用Tkinter integer variable class和你怀疑的lambda函数做这样的事情。 IntVar
类型的变量具有.get()
和.set()
方法,可以让您毫不奇怪地获取并设置其值。以下面的例子为例:
from Tkinter import *
class App(Frame):
def __init__(self, *args, **kwargs):
Frame.__init__(self, *args, **kwargs)
# initialise Integer Variables
self.example1 = IntVar()
self.example1.set(2)
self.text1 = Entry(root, textvariable=self.example1, state=DISABLED)
self.text1.grid(row=0, column=0)
self.button1 = Button(root, text="Double", command=lambda: self.double_value(self.example1))
self.button1.grid(row=1, column=0)
def double_value(self, var):
var.set(var.get() * 2)
root = Tk()
app = App(root)
root.mainloop()
这为您提供了一些灵活性,并且可以扩展为将相同的功能应用于与不同Entry
框和IntVar
变量相关的多个按钮。