Выпадающие меню в kivy с добавлением других кнопок

Так я ж говорю

app.dropdownkv.open(what)

Если они внутри одного виджета в kv.

An id is limited in scope to the rule it is declared in, so in the code above s_but can not be accessed outside the <MySecondWidget> rule.

кнопка what в другом контейнере, вот полный kv файл:

<cont>:
    Button:
        id: a
        text: app.text
        size_hint: (0.5, 0.1)
        pos_hint: {'top': 1, 'left': 0.1}
        on_release: app.dropdown.open(self)


    Button:

        text: app.text2
        size_hint: (0.5, 0.1)
        pos_hint: {'top': 1, 'right': 1}
        on_release: app.dropdown2.open(self)
        id: what

    TextInput:

        size_hint: 0.5,0.07
        pos_hint: {'top': 0.9, 'left': 0.1}
        hint_text: 'a'
        on_text: app.a1()
        input_filter: 'float'
        id: inputa





    Label:
        text: app.text3
        pos_hint: {'top': 0.83, 'center_x': 0.5}
        size_hint: 0.5,1

    Button:
        text: 'solve'
        size_hint: (1, 0.2)
        pos_hint: {'top': 0.83, 'center_x': 0.5}
        on_press: app.solve()

<dropkvad>:
    TextInput:
        size_hint_y:  None
        height:  44
        on_text: app.b1()
        hint_text: 'b'
        input_filter: 'float'
        id: inputb

<drop1>:
    Button:
        text: 'perimetr'
        size_hint_y:  None
        height:  44
        on_press: app.per()
        on_release: root.select('perimetr')


    Button:
        text: 'ploshad'
        size_hint_y:  None
        height:  44
        on_press: app.plo()
        on_release: root.select('ploshad')



<drop2>:
    Button:
        text: 'kvadrat'
        size_hint_y:  None
        height:  44
        on_press: app.kvad()
        on_release: app.dropdownkv.open(what)

    Button:
        text: 'pramoygolnik'
        size_hint_y:  None
        height:  44
        on_press: app.pram ()
        on_release: root.select('pramoygolnikr')


А как они создаются в приложении?

Так нельзя обращаться потому что каждый “контейнер” (точнее они называются Rule) это не конкретный экземпляр, а как класс, шаблон, экземпляры которого могут быть созданы где угодно сколько угодно раз.

Например, так:

<cont>:
    drop2:
        id: w1
    drop2:
        id: w2

Как вариант можно просто не плодить лишние контейнеры если они не нужны и просто в cont всё перенести.

Или добавить в cont в kv как в примере выше, и тогда если cont это корень приложения (создается и возвращается в build), то можно app.dropdownkv.open(app.root.ids.w1.what)

Похожий пример: https://stackoverflow.com/a/46408702/964478

сделал ка ты сказал:

<cont>:
    Button:
        id: a
        text: app.text
        size_hint: (0.5, 0.1)
        pos_hint: {'top': 1, 'left': 0.1}
        on_release: app.dropdown.open(self)


    Button:

        text: app.text2
        size_hint: (0.5, 0.1)
        pos_hint: {'top': 1, 'right': 1}
        on_release: app.dropdown2.open(self)
        id: what

    TextInput:

        size_hint: 0.5,0.07
        pos_hint: {'top': 0.9, 'left': 0.1}
        hint_text: 'a'
        on_text: app.a1()
        input_filter: 'float'
        id: inputa





    Label:
        text: app.text3
        pos_hint: {'top': 0.83, 'center_x': 0.5}
        size_hint: 0.5,1

    Button:
        text: 'solve'
        size_hint: (1, 0.2)
        pos_hint: {'top': 0.83, 'center_x': 0.5}
        on_press: app.solve()

    drop2:
        Button:
            text: 'kvadrat'
            size_hint_y:  None
            height:  44
            on_press: app.kvad()
            on_release: app.dropdownkv.open(what)

        Button:
            text: 'pramoygolnik'
            size_hint_y:  None
            height:  44
            on_press: app.pram ()
            on_release: root.select('pramoygolnikr')


<dropkvad>:
    TextInput:
        size_hint_y:  None
        height:  44
        on_text: app.b1()
        hint_text: 'b'
        input_filter: 'float'
        id: inputb

<drop1>:
    Button:
        text: 'perimetr'
        size_hint_y:  None
        height:  44
        on_press: app.per()
        on_release: root.select('perimetr')


    Button:
        text: 'ploshad'
        size_hint_y:  None
        height:  44
        on_press: app.plo()
        on_release: root.select('ploshad')

и при запуске получается вот так:

хотя должно быть так:

и открываться так:

но теперь при нажатии на кнопку kvadrat появляется поле ввода, но исчезает при нажатии на другую область экрана

А как drop2 раньше добавлялся?
Вообще надо layout’ы, pos_hint и т.п. использовать, чтобы указать где что должно быть.

это нужно если оставить

если переносить, то можно просто сами кнопки.