Как использовать выпадающий виджет в киве - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь добавить выпадающую кнопку в виджет, но она показывает только кнопку, без надписей или ввода текста. После закрытия приложения он показывает мне второй виджет со всеми вещами. Где я делаю ошибку? Что ж, спасибо

Мой код нуба:

main.py:

class MyGrid(FloatLayout):
    name = ObjectProperty(None)
    email = ObjectProperty(None)
    psc = ObjectProperty(None)


def btn(self):
    self.clear_btn()

def clear_btn(self):
    self.email.text = ""

class MyApp(App): # <- Main Class
    def build(self):
        return MyGrid()


if __name__ == "__main__":
    MyApp().run()

dropdown = DropDown()
for index in range(10):

    btn = Button(text='Value %d' % index, size_hint_y=None, height=44)

    btn.bind(on_release=lambda btn: dropdown.select(btn.text))

    dropdown.add_widget(btn)


mainbutton = Button(text='Hello', size_hint=(None, None))

mainbutton.bind(on_release=dropdown.open)

dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))

runTouchApp(mainbutton)

my kv.file:

<MyGrid>:
    Label:
        text: "Email: "

    TextInput:
        id: email
        multiline:False


    Button:
        size_hint: 0.3, 0.1
        pos_hint: {"x":0.5, "top":0.11}
        text:"Send"
        on_press: root.btn()

1 Ответ

1 голос
/ 28 апреля 2020

Ваша проблема в том, что код:

if __name__ == "__main__":
    MyApp().run()

запускает ваш MyApp, и он не возвращается, пока MyApp не закроется. Таким образом, код после этого не запускается, пока MyApp не закроется, а затем

runTouchApp(mainbutton)

запустит еще один App. Возможно, вам нужен код, который создает DropDown внутри класса где-то (может быть MyGrid), и добавьте mainbutton к gui (возможно, в MyGrid).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...