我正在尝试根据集合中的数据填充菜单。唯一的问题是我希望以后能够根据所选的菜单项更改变量。我现在拥有的东西不能按预期工作。无论是否正在选择菜单中的项目,都会打印出CurrentGenre。有什么我想念的吗?我应该抛弃这种思路并尝试不同的方法吗?我是否应该存储self.genreMenu中的每一个...我在哪里制作,以便我以后可以参考它们?感谢
for g in genres:
self.genreMenu.add_command(label=g)
self.genreMenu.bind("<Button-1>", self.change_genre(g))
print(currentGenre)
def change_genre(self, label):
global currentGenre
currentGenre = label
print (currentGenre)
我改变了我的代码,改为使用add_command中的命令选项。我试图使用下面提到的lamba建议,但我仍然不确定如何做到这一点。我注意到,当没有将currentGenre分配给label时,currentGenre会被打印出来但是当被分配时,除了类型的初始列表之外什么都没有被打印出来。这是完整的代码块。流派是一套。
for i in data_load["genres"]:
for j in i:
genres.add(i["name"])
for g in genres:
genre_menus.append(self.genreMenu.add_command(label=g, command=self.change_genre(g)))
#self.genreMenu.bind("<Button-1>", lambda event, g: self.change_genre(event, g))
def change_genre (self, label):
global currentGenre
currentGenre = label
print (currentGenre).
答案 0 :(得分:1)
您必须为菜单指定一个引用。这可以使用lambda
轻松完成,这会创建一个匿名函数。你可以让这个函数调用你真正的函数。
for g in genres:
self.genreMenu.add_command(label=g,
command=lambda genre=g: self.change_genre(genre))
有关lambda的更深入解释,请参阅以下答案:Why is Button parameter “command” executed when declared?