替换Tkinter按钮中的lambda命令,但给出了错误的答案

2024-06-25 05:28:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我应该能够从一个自定义框架中删除一个包含多个自定义框架的项。第二个按钮用于将节添加到管理所有不同节的列表中:

def addSection():
    sectionNumber = len(sections)
    if sectionNumber <= 25:
        sections.append(sectionFrame(SectionsFrame.interior,sectionNumber))
        sections[sectionNumber].pack(side=TOP)
        sections[sectionNumber].getButton().config(command = lambda: removeSpecificSection(sections[sectionNumber].getSectionNumber()))

现在,当我删除一个部分时,我要给下面的每一个部分在列表中的适当位置。这是分区按钮方法:

^{pr2}$

section.moveDownIndex()在它自己的类中只有self.sectionNumber=self.sectionNumber-1。在

我遇到的问题是,如果我试图删除remove函数所触及的任何部分,那么它只会删除最后一个部分,而进入第二个调用的索引会确认总是最后一个索引。在

也许我不理解lambda函数,为什么每个按钮在调用remove函数时不使用自己的部分?在


Tags: lambda函数self框架列表lenifdef
1条回答
网友
1楼 · 发布于 2024-06-25 05:28:31

这是一个非常常见的初学者陷阱。lambda是延迟绑定,这意味着它在调用时使用sectionNumber中的值,而不是定义它时的值。要获得您想要的行为,您需要使用functools.partial

from functools import partial
...
sections[sectionNumber].getButton().config(command = partial(removeSpecificSection, sections[sectionNumber])))

然后在removeSpecificSection方法中调用getSectionNumber。在

相关问题 更多 >