【问题标题】:How to get the name of a button tkinter python如何获取按钮tkinter python的名称
【发布时间】:2021-01-21 14:21:51
【问题描述】:

我对在 python 中使用 tkinter 非常陌生,并且在获取从循环创建的某些按钮的名称时遇到了麻烦。理论上,按下一个按钮应该会打印出按下的按钮的名称。

这是我的代码:

import tkinter as tk

def f ():
    print ("Frame:", frm.winfo_children())

root = tk.Tk()
frm = tk.Frame(root)

for i in range (0,3):
  bt = tk.Button(frm,text = str(i),name = str(i),command = f).pack()
frm.pack()

root.mainloop()

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    您可以使用 lambda 将数字传递给回调函数:

    import tkinter as tk
    
    def f(name):
        print ("Frame:", frm.winfo_children())
        print(name)
    
    root = tk.Tk()
    frm = tk.Frame(root)
    
    for i in range (0, 3):
        bt = tk.Button(frm, text = str(i), name = str(i), command = lambda i=i: f(str(i)))
        bt.pack()
    
    frm.pack()
    
    root.mainloop()
    

    【讨论】:

    • 是的,但是 f 函数只返回它所拥有的 i 的最后一个值,因为一旦 for 循环完成,就会使用按钮。我正在等待当我按下按钮时打印它的名称
    • @Dante_Annetta @frederic 你需要按照here 的描述写lambda i=i: f(str(i))
    • @Dante_Annetta 我测试了我的代码,它现在可以工作了。
    • @Dante_Annetta 请点击左侧的灰色复选标记接受我的回答
    【解决方案2】:

    这应该可以工作

    import tkinter as tk
    
    def f (): 
        print ("Frame:", frm.winfo_children())
    
    root = tk.Tk() 
    frm = tk.Frame(root)
    
    for i in range (0, 3): 
        bt = tk.Button(self, frm, text = str(i), name = str(i), command = f)
        bt.pack() 
    frm.pack()
    
    root.mainloop()
    

    【讨论】:

    • 这如何回答这个问题?此外,您不必要地包装框架 3 次。
    • @TedKleinBergman 他是怎么打包 3 次的?
    • @frederic 在 for 循环中有一个 frm.pack() 被调用了 3 次。
    猜你喜欢
    • 1970-01-01
    • 2015-12-11
    • 2018-10-12
    • 2014-10-20
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多