Так я ж говорю
app.dropdownkv.open(what)
Если они внутри одного виджета в kv.
An
id
is limited in scope to the rule it is declared in, so in the code aboves_but
can not be accessed outside the<MySecondWidget>
rule.
Так я ж говорю
app.dropdownkv.open(what)
Если они внутри одного виджета в kv.
An
id
is limited in scope to the rule it is declared in, so in the code aboves_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
и т.п. использовать, чтобы указать где что должно быть.
это нужно если оставить
если переносить, то можно просто сами кнопки.