【问题标题】:tkinter - get button name?tkinter - 获取按钮名称?
【发布时间】:2012-10-12 15:33:45
【问题描述】:

我正在尝试为每个 tkinter 按钮执行不同的代码 - 直到从列表中调用它们的名称才知道。 gtk 有 get label(可惜我不能用 gtk)。

我如何使用 tkinter 实现类似的功能?

def click_one(newbuttonname):
        try:
                writethisdown = open("participantsmovedlog.txt", 'a')
        except:
                pass
        rotatee = newbuttonname
        thispersonwasrotated(rotatee)
        writethisdown.close()

....同时在makebutton函数中:

for someuser in listofusers:
            username = someuser
            newbuttonname = username 
            newbuttonname = Tkinter.Button(win, text = newbuttonname, command = lambda:click_one(username))
            newbuttonname.pack()

【问题讨论】:

    标签: python button tkinter label


    【解决方案1】:

    Bryan 的回答可能无法完全解决这个问题,特别是,他的解决方案只有在按钮的文本在创建后从未更改的情况下才有效。

    button.config('text')[-1]
    

    返回实际按钮的文本。

    【讨论】:

      【解决方案2】:

      你快到了。您只需通过 lambda 或 functools.partial 传递名称:

      newbuttonname = username 
      newbuttonname = Tkinter.Button(win, text = newbuttonname, 
          command = lambda name=username:click_one(name))
      

      您可以使用相同的技术来传递实际的 wodget 或任何其他数据。

      【讨论】:

      • 太棒了!但是即使使用 win.quit() 或 win.destroy() 我也不能让 Tkinter 死掉?
      • @Donnied:我不明白你的评论。这个问题和答案与使程序死亡无关。如果您遇到问题,请提出另一个问题,我相信有人会回答。
      • 谢谢 Bryan - 我已经接受了你的回答。这真的只是一个旁白——我会问这个问题,但它已经被问了十几次了——我怀疑我会被激怒——你没有读过线程 x、y 和 z 吗?我去问问吧……
      【解决方案3】:

      当您标记按钮时,它应该用引号引起来:

      newbuttonname = tk.Button(win, text="NewButtonName")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-13
        • 1970-01-01
        • 1970-01-01
        • 2015-12-11
        • 2014-10-20
        • 1970-01-01
        • 2013-02-22
        • 1970-01-01
        相关资源
        最近更新 更多