Python 如果我用列表创建了一个带有复选按钮的菜单按钮,我如何获得所选按钮的名称?
好的,是的,这个问题很难回答,原因如下: 我想创建一个带有复选按钮的菜单按钮,由列表创建Python 如果我用列表创建了一个带有复选按钮的菜单按钮,我如何获得所选按钮的名称?,python,tkinter,Python,Tkinter,好的,是的,这个问题很难回答,原因如下: 我想创建一个带有复选按钮的菜单按钮,由列表创建 tflist=tf.liste 对于tflist中的tf: n1mb.menu.add_checkbutton(label=tf,command=n1change) N1M是菜单按钮 变化是一种功能 def n1change(): n1mb['text']=tf 我想做的是,菜单按钮显示选中的按钮 显示的代码的问题是,如果我选择一个按钮,菜单按钮将标记为列表中的最后一项,而不是所选的项。创建复选按钮时,
tflist=tf.liste
对于tflist中的tf:
n1mb.menu.add_checkbutton(label=tf,command=n1change)
N1M是菜单按钮
变化是一种功能
def n1change():
n1mb['text']=tf
我想做的是,菜单按钮显示选中的按钮
显示的代码的问题是,如果我选择一个按钮,菜单按钮将标记为列表中的最后一项,而不是所选的项。创建复选按钮时,您将循环通过
tflist
。完成此循环后,tf
具有tflist
中最后一项的值。如果以后从未更改tf
,则设置n1mb['text']=tf
将始终将文本设置为tflist
的最后一个值
相反,您希望将要设置的文本“烘焙”到您设置的命令中。通过使用lambda
匿名函数,可以为命令
提供附加参数。在循环中执行此操作时。因此,您的命令可能如下所示:
command=lambda text=tf: n1change(text)
但是,这种行为对于复选按钮来说没有意义,因为您可以单独启用和禁用它们。我猜你实际上想要单选按钮,因为在任何时候只有一个是activa。一个完整的例子是:
import tkinter as tk
root = tk.Tk()
v = tk.IntVar()
n1mb = tk.Menubutton(root, text="condiments", relief=tk.RAISED)
n1mb.grid()
def n1change(tf):
n1mb['text'] = tf
n1mb.menu = tk.Menu(n1mb, tearoff=0)
n1mb["menu"] = n1mb.menu
tflist = ['a', 'b', 'c']
for tf in tflist:
n1mb.menu.add_radiobutton(label=tf, command=lambda text=tf: n1change(text))
n1mb.pack()
root.mainloop()
阅读,非常感谢。我看了3个不同的教程,它们都使用了checkbutton,因此我认为您只能添加checkbutton。您可以选择“命令”、“级联”(子菜单)、“checkbutton”、“radiobutton”或“分隔符”()。