здравствуйте, подскажите пожалуйста как используя библиотеку kivy и файл kv сделать выпадающие меню?
в первой ссылке показывается как сделать выпадающий список только сверху, а во второй ссылке можно сделать то что мне надо, но после этого нельзя добавить другие виджеты, а во втором варианте с файлом kv (официальная документация) появляется только одна кнопка без выпадающего списка
В runTouchApp
можно передать контейнер с виджетами вместо одной кнопки.
Как тут в примере внизу
box = BoxLayout()
box.add_widget(lbl)
box.add_widget(btn)
runTouchApp(box)
или без runTouchApp
в этом оф. примере
class MyPaintApp(App):
def build(self):
parent = Widget()
self.painter = MyPaintWidget()
clearbtn = Button(text='Clear')
clearbtn.bind(on_release=self.clear_canvas)
parent.add_widget(self.painter)
parent.add_widget(clearbtn)
return parent
if __name__ == '__main__':
MyPaintApp().run()
По идее оба примера делают примерно одно и то же. Список вроде при клике на кнопку должен появляться.
а как при этом коде:
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
class CustomDropDown(DropDown):
pass
class app(App):
def build(self):
dropdown = CustomDropDown()
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))
return mainbutton
if __name__ == '__main__':
app().run()
и с таким kv файлом:
<CustomDropDown>:
Button:
text: 'perimetr'
size_hint_y: None
height: 44
on_release: root.select('perimetr')
Button:
text: 'ploshad'
size_hint_y: None
height: 44
on_release: root.select('ploshad')
добавить расположение для mainbutton?
Какое расположение?
Видимо задать какие-то свойства из Button/Label/Widget.
Например, pos:
mainbutton.pos = (100, 200)
И это может поможет: https://blog.kivy.org/2014/01/positionsize-of-widgets-in-kivy/
всё с позиционированием выпадающего меню разобрался,сейчас не могу понять как добавить другие виджеты, создал вот такой код
from kivy.app import App
from kivy.uix.dropdown import DropDown
from kivy.uix.button import Button
from kivy.uix.floatlayout import FloatLayout
from kivy.base import runTouchApp
class CustomDropDown(DropDown):
pass
class cont(FloatLayout):
pass
class app(App):
def build(self):
dropdown = CustomDropDown()
mainbutton = Button(text='что ищем?', size_hint=(None, None))
mainbutton.pos_hint = {'center_x': 0.5, 'center_y': 0.5}
mainbutton.bind(on_release=dropdown.open)
dropdown.bind(on_select=lambda instance, x: setattr(mainbutton, 'text', x))
return mainbutton
if __name__ == '__main__':
app().run()
runTouchApp(cont())
и kv файл
<CustomDropDown>:
Button:
text: 'perimetr'
size_hint_y: None
height: 44
on_release: root.select('perimetr')
Button:
text: 'ploshad'
size_hint_y: None
height: 44
on_release: root.select('ploshad')
<cont>:
Button:
text: 'HELLO'
size_hint: None, None
pos_hint: {'center_x': 0.2, 'center_y': 0.2}
но при запуске появляется только меню, но если открыть меню и нажать на крестик (для выхода из приложения), то кнопка появляется, как исправить?
я прочитал и не нашел там нужной информации, я хочу создать второй контейнер с виджетами, и при прорисовке окна показывать оба контейнера, как это сделать?
Так это ж и есть
Только в контейнер положить не сразу кнопки, а еще два контейнера.
Контейнер — какой-нибудь Layout или свой виджет.
https://techwithtim.net/tutorials/kivy-tutorial/the-kv-design-language-kv-file/
https://kivy.org/doc/stable/guide/lang.html#designing-with-the-kivy-language
Надо что-то одно из этого выбрать )