Kivy - Выпадающий список - Как получить текущий текст с выбранной кнопки? - PullRequest
0 голосов
/ 20 января 2019

В следующем коде есть кнопка, которая при нажатии отображает раскрывающийся список с 9 значениями. Как только я выберу один из этих вариантов, я хотел бы напечатать на Python, какое значение я выбрал. Например, если я выбираю «Значение 4», в тот момент, когда я выбираю «Значение 4», это значение должно быть напечатано в моем коде.

Я нашел похожий вопрос по этому поводу, и я предоставляю ссылку ниже, хотя ни один из них не решил мою проблему. Питон, Киви. Получить текст из динамически созданных кнопок с раскрывающимся списком Получение значений из выпадающего виджета kivy

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()

Мне нужно напечатать текст выбранной «кнопки» в выпадающем списке.

1 Ответ

0 голосов
/ 21 января 2019

Прежде всего, вам нужно добавить 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...