Python:Tkinter:尝试使用集合动态填充菜单
Python: Tkinter: Trying to Populate a Menu Dynamically With a Set
我正在尝试根据一组数据填充菜单。唯一的问题是我希望以后能够根据所选的菜单项更改变量。我目前拥有的功能无法按预期工作。无论菜单中的项目是否被选中,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 中的命令选项。我试过使用下面提到的兰巴建议,但我仍然不确定该怎么做。我注意到,当没有将 currentGenre 分配给标签时,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).
您必须给菜单一个引用一个功能。这可以使用 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?
我正在尝试根据一组数据填充菜单。唯一的问题是我希望以后能够根据所选的菜单项更改变量。我目前拥有的功能无法按预期工作。无论菜单中的项目是否被选中,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 中的命令选项。我试过使用下面提到的兰巴建议,但我仍然不确定该怎么做。我注意到,当没有将 currentGenre 分配给标签时,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).
您必须给菜单一个引用一个功能。这可以使用 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?