在下面的代码中,有一个按钮,当按下该按钮时,将显示带有9个值的下拉列表。 选择这些选项之一后,我想在Python上打印选择的值是什么。 例如,如果选择“值4”,则在选择“值4”时必须在代码中打印该值。
我发现了与此类似的问题,并且提供了以下链接,尽管它们都没有解决我的问题。 Python, Kivy. Get text from dynamically created buttons with a dropdown Retrieving values from a kivy dropdown widget
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.dropdown import DropDown
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
class Test(App):
def build(self):
box = BoxLayout(orientation = 'vertical')
label = Label(text = 'LABEL')
button = Button(text='Selecione', font_size=30, size_hint_y=0.15 , on_release = self.lista)
box.add_widget(label)
box.add_widget(button)
return box
def lista(self, button):
dropdown = DropDown()
for index in range(10):
btn = Button(text='Value %d' % index, size_hint_y=None, height=44)
btn.text = 'Value %d' %index
btn.bind(on_release=lambda btn: dropdown.select(btn.text))
dropdown.add_widget(btn)
button.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(button, 'text', x))
print(button.text)
Test().run()
我需要在下拉列表中打印所选“按钮”的文本。
答案 0 :(得分:0)
首先,您需要在dropdown.open(button)
函数中添加一个lista
,以便从第一个按钮调用该下拉列表时就可以打开它。
您不必在每次调用release
时都重新绑定第一个按钮的lista
。
您还必须创建一次dropdown
,而不是每次都调用lista
。其按钮也是如此...
但是您必须保留它的引用,以便可以在lista
函数中使用它。
最后,您必须将每个下拉按钮的on_release
属性绑定到打印操作。
class Test(App):
def build(self):
box = BoxLayout(orientation='vertical')
label = Label(text='LABEL')
button = Button(text='Selecione', font_size=30, size_hint_y=0.15, on_release=self.lista)
box.add_widget(label)
box.add_widget(button)
self.dropdown = DropDown() # Create the dropdown once and keep a reference to it
self.dropdown.bind(on_select=lambda instance, x: setattr(button, 'text', x))
for index in range(10): # create the buttons once
btn = Button(text='Value %d' % index, size_hint_y=None, height=44,
on_release=lambda btn: print(btn.text)) # bind every btn to a print statement
btn.text = 'Value %d' % index
btn.bind(on_release=lambda btn: self.dropdown.select(btn.text))
self.dropdown.add_widget(btn)
return box
def lista(self, button):
# dropdown = DropDown() <---- DON'T NEED THIS
# button.bind(on_release=self.dropdown.open) <---- DON'T NEED THIS
self.dropdown.open(button) # you need this to open the dropdown
# print(button.text)
Test().run()