Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我用列表创建了一个带有复选按钮的菜单按钮,我如何获得所选按钮的名称?_Python_Tkinter - Fatal编程技术网

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”或“分隔符”()。