【问题标题】:How can I get TK button commands to take in a parameter with a variable (Python)如何让 TK 按钮命令接收带有变量的参数(Python)
【发布时间】:2012-10-18 07:18:06
【问题描述】:

这困扰了我一个多星期。正如标题所问,我怎样才能让 TK 按钮命令接受带有变量的参数?

这是我正在使用的确切代码:

i=0

# Make a Staff list button
staffButton = Button(masterFrame,
                        text='Staff List',
                        width=20,
                        justify=LEFT,
                        #command=lambda:self.openTabHere(isLeft,STAFF_LIST_TAB))
                        command=lambda:self.openTabHere(isLeft,i))
staffButton.grid(column=0, row=1)

# Make a course list button
courseButton = Button(masterFrame,
                        text='Course List',
                        width=20,
                        justify=LEFT,
                        #command=lambda:self.openTabHere(isLeft,COURSE_LIST_TAB))
                        command=lambda:self.openTabHere(isLeft,i))
courseButton.grid(column=0, row=0)

i=1

请注意,如果我使用注释(硬编码)命令,它会按预期工作。但是,如果我使用 not 注释的代码和变量 i,则两个按钮都会以 i=1 的命令结束。

是命令在运行时获取变量 i 吗?如果是这样,或者出于其他原因,我该怎么做才能完成我想做的事情?

这是因为我对每个员工都做了类似的事情;一个 for 循环,旨在让按钮打开一个选项卡,该选项卡的人员 ID 位于参数中,作为无法硬编码的变量。

提前谢谢。

【问题讨论】:

  • 我刚试了一下,发现这不是解决方案。当我尝试运行它时,我得到了一个无效的语法。
  • 是的,我刚刚注意到它是 python 而不是 tcl,并删除了我的愚蠢评论。请注意,如果您发布了一个独立的程序而不是上面的摘录,其他人也许可以尝试一下并找到问题
  • 感谢您的提示;主要问题是我不想制作一个不能完全代表我的问题的独立程序。我担心我会遗漏一些不能传达潜在问题的细节:S

标签: python tkinter tk


【解决方案1】:

你需要在创建widget的时候绑定i的值:

staffButton = Button(..., command=lambda btn=i:self.openTabHere(isLeft,btn))

您可能需要对isLeft 执行相同的操作,除非这是一个静态值。

【讨论】:

  • 它工作!!!!!!我的地狱一周结束了(有点)。 staffButton = Button(..., command=lambda i=i : self.openTabHere(isLeft,i)) 这可以解决问题。后续问题:正如您所说,我需要使用 isLeft 来执行此操作,但合适的语法是什么?
  • @narutoreplicate:语法看起来像lambda A=isLeft, B=i: self.openTabHere(A,B) 注意到这个模式了吗?将 lambda 视为没有名称的函数。 lambda 之后和: 之前的部分是参数列表及其默认值,就好像你已经完成了def some_func(A="abc", B="123")
  • 非常有趣的东西。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2017-06-25
相关资源
最近更新 更多