代码
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命令中。
我提前感谢各种帮助。
答案 0 :(得分:2)
你不能在这样的循环中使用lambda。您必须使用functools.partial
。
from functools import partial
#...
self.var[f'b{thing}'] = Button(self.root, text='Test',command = partial(self.remove, thing))