Как включить функцию прокрутки при необходимости? - PullRequest
0 голосов
/ 20 ноября 2018

Я создаю приложение с Kivy, в котором будет множество выпадающих элементов. Когда я делаю аккордеон больше экрана, я получаю «Недостаточно места, чтобы показать всех детей». Так как у меня слишком много детей, чтобы отображать их на одной странице, и я не хочу отображать их всех сразу; как мне сказать программе не беспокоиться об этом и просто включить функцию прокрутки? Для жизни я не могу найти никаких примеров в Интернете, где у больших аккордеонов есть дополнительная функция прокрутки. Все решения, которые я нашел в интернете, просто говорят «Сделай больше места».

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

from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.label import Label
from kivy.app import App


class AccordionApp(App):
    def build(self):
        root = Accordion(orientation='vertical')
        for x in range(30):
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            root.add_widget(item)
        return root


if __name__ == '__main__':
    AccordionApp().run()

1 Ответ

0 голосов
/ 21 ноября 2018

Вы можете отрегулировать размер Accordion, если вы можете рассчитать необходимый размер, и поместить Accordion в ScrollView. Например:

from kivy.core.window import Window
from kivy.uix.accordion import Accordion, AccordionItem
from kivy.uix.label import Label
from kivy.app import App
from kivy.uix.scrollview import ScrollView


class AccordionApp(App):
    def build(self):
        root = ScrollView(size_hint=(None, 1), size=(Window.width, Window.height))
        acc = Accordion(size_hint_x=None)
        width_calc = 200     # guess at width needed for one open item content
        root.add_widget(acc)
        for x in range(30):
            item = AccordionItem(title='Title %d' % x)
            item.add_widget(Label(text='Very big content\n' * 10))
            acc.add_widget(item)
            width_calc += item.min_space    # add minimum width for an item
        acc.width = width_calc              # set Accordion width
        return root


if __name__ == '__main__':
    AccordionApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...