Building Dropdowns Dynamically in Kivy(在 Kivy 中动态构建下拉菜单)
问题描述
我想根据类的字典属性在 kivy 中创建下拉列表.但是在循环中创建这些东西要么让 Kivy 感到困惑,要么让我感到困惑.这是我所拥有的:
I'd like to create dropdown-lists in kivy based on a dictionary property of a class. But something about creating these in a loop is either confusing Kivy or I am just confused. Here's what I have:
这是我的财产的样子:
当这个渲染时,下拉栏看起来是正确的,三个按钮,但是,牛奶一个没有触发下拉目,咖啡一个触发它的下拉次,但选择时,改变糖按钮的文本,第三个按钮正常工作,触发下拉菜单并在选择时更改按钮文本.
When this renders, the dropdown bar looks correct, three buttons, BUT, the milk one does not trigger a dropdown, the coffee one triggers it's dropdown, but when selected, changes the sugar button's text, and the third button works normally, triggering a dropdown and changing the buttons text on selection.
我觉得我的循环做错了.但也许你不能像这样声明下拉菜单?谢谢.
I feel like I'm just doing something wrong with my loop. But maybe you can't declare dropdowns like this? Thanks.
这是我必须做的才能让它工作.
Here's what I had to do to get it working.
推荐答案
我很确定您的问题主要与 lambda 函数在 for 循环中的行为方式有关.例如,您可以查看 this 上一个问题以获取有关原因的信息 - 简短回答,每个 lambda接收相同的变量,所以只有那个变量(最后一个下拉菜单)做任何事情.
I'm pretty sure your problems are mostly to do with the way lambda functions behave in for loops. You can see for instance this previous question for information on why - short answer, every lambda receives the same variable, so only that variable (the last dropdown) does anything.
我没有时间创建一个工作示例(它很繁琐,而且您没有提供初始工作示例),但如果这还不足以让您修复问题.
I didn't have time to create a working example (it's fiddly, and you didn't provide an initial working example), but I'll try to make one later if this isn't enough for you to fix the issue.
我也遇到了下拉菜单不起作用的问题,但我认为这是因为您没有存储对它们的引用,因此它们会被垃圾收集.我添加了 dropdowns = ListProperty([])
和 self.dropdowns.append(dropdown)
来保留引用,从而解决了它们不出现的问题.
I also had a problem with dropdowns not working, but I think that's because you don't store references to them so they get garbage collected. I added dropdowns = ListProperty([])
and self.dropdowns.append(dropdown)
to keep references around, which solved the problem of them not appearing.
这篇关于在 Kivy 中动态构建下拉菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!