使用tkinter回调有效地设置变量

时间:2017-05-04 16:09:42

标签: python tkinter

我需要在tkinter Button上使用tkinter回调设置一些变量。所以我可以说(在类定义中)

Button1 = Button(parentframe, text="set", command = self.setvar)

def setvar(self):
    self.myvar = 7

有没有办法用内联(lambda)函数做到这一点,而不是用愚蠢的小回调搞乱事情?

command = lambda *args: something?

2 个答案:

答案 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变量相关的多个按钮。