Tkinter上的按钮命令问题

时间:2018-01-18 20:51:25

标签: python class tkinter lambda

代码

from tkinter import *

class Thing:

    var = {}
    def item(self):
        self.root = Tk()
        # Settings of main window
        things = [] # Array wich contains items with different values
        for thing in things:
            # 1*
            self.var[f'b{thing}'] = Button(self.root, text='Test',command = lambda: self.remove(thing))
            self.var[f'b{thing}'].pack()

    def remove(self, thing=None):
        print(thing)
        # 2*
Thing().item()

问题

当我第一次按任何按钮时,班级remove打印正确的值,当我尝试按另一个按钮时,班级'删除'再次打印第一个值而不是第二个值。 我认为问题出在buttons命令中。 我提前感谢各种帮助。

1 个答案:

答案 0 :(得分:2)

你不能在这样的循环中使用lambda。您必须使用functools.partial

from functools import partial
#...
self.var[f'b{thing}'] = Button(self.root, text='Test',command = partial(self.remove, thing))