Вид прокрутки Kivy не прокручивается

#python #scroll #kivy

#python #прокрутка #kivy

Вопрос:

Я впервые использую виджет просмотра прокрутки kivys, и я не уверен, как я его запускаю. Я хочу прокрутить вверх и выполнить через разные метки.

Как я могу этого добиться?

Какие атрибуты необходимы для виджета просмотра прокрутки? Могу ли я использовать для этого какой-либо макет?

Спасибо

Этот код, который на данный момент не работает:

 <YearLabel@ButtonBehavior Label>:
<YearScreen>:
    canvas.before:
        Color:
            rgba: 1,1,1,0.25
        Rectangle:
            pos: self.pos
            size: self.size


    canvas.after:
        Color:
            rgba : 0,0,0,1
        Rectangle:
            pos: 160,1560
            size: 419,60


    ScrollView:
        scroll_timeout: 250
        scroll_distance: 20
        do_scroll_y: True
        do_scroll_x: False
        height: 100
        GridLayout:
            cols : 1
            spacing: 10
            padding: 10
            height: 50
            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2020"
                color: 0,0,0,1
                pos : 0,1200
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2021"
                color: 0,0,0,1
                pos: 0,900
                font_size: "120sp"
            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2022"
                color: 0,0,0,1
                pos: 0,600
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2023"
                color: 0,0,0,1
                pos: 0,300
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2024"
                color: 0,0,0,1
                pos: 0,0
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2025"
                color: 0,0,0,1
                pos: 0,-300
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2026"
                color: 0,0,0,1
                pos: 0,-600
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2027"
                color: 0,0,0,1
                pos: 0,-900
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2028"
                color: 0,0,0,1
                pos: 0,-1200
                font_size: "120sp"

            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2029"
                color: 0,0,0,1
                pos: 0,-1500
                font_size: "120sp"


            YearLabel:
                id: year_label
                font_name: "Fonts/sans-serif.ttf"
                text : "2030"
                color: 0,0,0,1
                pos: 0,-1800
                font_size: "120sp"

  

Ответ №1:

ScrollView Не будет работать, если его дочерний элемент (the GridLayout ) меньше, чем ScrollView . Как правило, GridLayout он будет достаточно большим, чтобы вместить все его дочерние элементы (the YearLabels ). Удобно, GridLayout что можно вычислить этот размер. Вот модифицированная версия вашего kv , которая его использует:

 ScrollView:
    scroll_timeout: 250
    scroll_distance: 20
    do_scroll_y: True
    do_scroll_x: False
    GridLayout:
        cols : 1
        spacing: 10
        padding: 10
        size_hint_y: None  # required since we are setting height
        height: self.minimum_height  # let GridLayout calculate height
  

Кроме того, я удалил height: 100 из ScrollView , поскольку это не имело никакого эффекта.

Для GridLayout вычисления minimum_height все его дочерние элементы должны быть четко определены heights . Итак, я добавил к вашему YearLabel правилу:

 <YearLabel@ButtonBehavior Label>:
    size_hint: 1, None
    height: dp(100)