Горизонтальная и вертикальная прокрутка на одном экране киви - PullRequest
0 голосов
/ 02 мая 2020

Я пытаюсь создать экран с горизонтальной прокруткой в ​​верхней части страницы, занимающей ~ 25% вертикального пространства, и вертикальной прокруткой, занимающей оставшееся пространство (и затем возможность прокрутки вниз по экрану).

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

py файл:

import kivy
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.lang import Builder
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.image import Image
from

Window.clearcolor = (1,1,1,1)

class Window(Screen):
    pass

class MyApp(App):
    theme_cls = ThemeManager()


    def build(self):
        kv = Builder.load_file("kivy.kv")
        self.sm = WindowManager()

        screens = [Window(name="window")]
        for screen in screens:
            self.sm.add_widget(screen)

        self.sm.current = "window"
        return self.sm


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

kv file:

<Window>:
    name: "window"

    NavigationLayout:
        id: nav_layout
        MyNavDrawer:


        BoxLayout:
            orientation: "vertical"

            MDToolbar:
                pos_hint: {'top': 1}
                md_bg_color: 1, 1, 1, 1

            ScrollView: #horizontal scrollview - works fine
                size_hint_y: 0.5
                GridLayout:
                    rows: 1
                    id: scroll_horizontal
                    size_hint_x: None
                    col_default_width: root.width*0.2
                    width: self.minimum_width*1.3
                    spacing: 20

           ScrollView: #vertical scrollview, not working
                size_hint_y: 0.85
                do_scroll_x: False
                GridLayout:
                    id: scroll_vertical
                    cols: 1
                    size_hint_y: None
                    spacing: 40
                    height: self.minimum_height
                    canvas:
                        Color:
                            rgba: (1, 1, 1, 1)
                        Rectangle:
                            size: self.size
                            pos: self.pos
                    BoxLayout:
                        cols: 2
                        spacing: 10
                        Button:
                            size_hint_y: 0.5
                            text: "Btn1"
                        Button:
                            size_hint_y: 0.5
                            text: "Btn2"
                    BoxLayout:
                        cols: 2
                        spacing: 10
                        Button:
                            size_hint_y: 0.5
                            text: "Btn1"
                        Button:
                            size_hint_y: 0.5
                            text: "Btn2"
                    BoxLayout:
                        cols: 2
                        spacing: 10
                        Button:
                            size_hint_y: 0.5
                            text: "Btn1"
                        Button:
                            size_hint_y: 0.5
                            text: "Btn2"

Я бы хотел, чтобы они были независимы друг от друга, поэтому вы можете либо прокрутить по горизонтали вверху прокрутки, либо прокрутить по вертикали с помощью кнопок на раскладках на вертикали Scrollview

1 Ответ

0 голосов
/ 02 мая 2020

Потребовалась некоторая работа, чтобы ваш MCVE работал, но вот часть вашего kv, которую я изменил, чтобы прокрутка работала в обоих направлениях с двумя ScrollViews:

        ScrollView: #horizontal
            size_hint_y: 0.25
            do_scroll_y: False
            GridLayout:
                rows: 1
                id: scroll_horizontal
                size_hint: None, 1
                col_default_width: root.width*0.2
                width: self.minimum_width*1.3
                spacing: 20
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_x: None
                    width: self.minimum_width
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn1"
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn2"
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_x: None
                    width: self.minimum_width
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn1"
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn2"
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_x: None
                    width: self.minimum_width
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn1"
                    Button:
                        size_hint: None, 1
                        width: 500
                        text: "Btn2"


        ScrollView:   # vertical
            size_hint_y: 0.75
            do_scroll_x: False
            GridLayout:
                id: scroll_vertical
                cols: 1
                size_hint: 1.0, None
                spacing: 40

                # must set height
                height: self.minimum_height
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_y: None
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn1"
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn2"
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_y: None
                    height: self.minimum_height
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn1"
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn2"
                BoxLayout:
                    cols: 2
                    spacing: 10
                    size_hint_y: None
                    height: self.minimum_height
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn1"
                    Button:
                        size_hint: 0.5, None
                        height: 100
                        text: "Btn2"
...