嗨大家好我有关于kivy DropDown
的问题。我有这个例子:
def dropdownbutton(self):
dropdown = DropDown()
classlist = ['Barbarian', 'Knight', 'Sorcerer', 'Typical Seba', 'Hunter']
for index in classlist:
btn = Button(text='%s' % index, size_hint_y=None, height=44)
btn.bind(on_release=lambda btn: dropdown.select(btn.text))
dropdown.add_widget(btn)
mainbutton = Button(text='Class', size_hint=(None, None))
mainbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text',
x))
return mainbutton
我想要做的是跟踪我选择的当前btn.txt
,愚蠢,但我花了大约一个小时......你能帮助我吗?
btn.text
始终返回Hunter
答案 0 :(得分:0)
你已经通过在循环中定义lambda函数来点击这个classic problem。尝试:
btn.bind(on_release=lambda btn=btn: dropdown.select(btn.text))
答案 1 :(得分:0)
所以我在这堂课上做了一些工作:
class DropdownList(Button):
def __init__(self, label, labels):
Button.__init__(self,
text=label,
size_hint=(None, None))
self.buttons = []
self.list = DropDown()
for label in labels:
b = Button(text=label, notify=None, callback=None)
b.size_hint = (None, None)
self.buttons.append(b)
self.list.add_widget(b)
self.bind(on_release=self.list.open)`
使用这个类,我可以为每个按钮添加特殊行为,如下所示:
def build(self):
classlist = ['Barbarian', 'Knight', 'Sorcerer', 'Typical Seba', 'Hunter']
self.lst = DropdownList("Class", classlist)
self.lst.buttons[0].bind(on_release=self.randomfunction)
print self.lst.buttons[0].text
在行为方法中,我必须传递event
作为参数:
def randomfunction(self, event):
print "random string"
但这里仍然存在一些问题。我无法setattr
更改self.list DropDown
按钮的文字。我在这里错过了什么?我只想在每个按钮上有两个行为。一:从所选按钮中取出文本并将其放到DropDown按钮,然后关闭它。第二:使用所选按钮中的文本创建与按钮同名的类实例...我将暂时保留它,但是如果有人能解决它会很棒