Noob Saibot
Noob Saibot

Reputation: 4749

Kivy: ScrollViewApp example in Kivy Language

I'm having trouble with going back and forth between the concepts in the Kivy language, vs. Python language. I'm not very good at explaining things, and i've thought about how to explain my specific problem, but the best way i can think to do that is:

How would one implement the ScrollViewApp using the Builder function?

Upvotes: 3

Views: 7541

Answers (1)

Tshirtman
Tshirtman

Reputation: 5947

hm, something like

ScrollView:
    size_hint: None, None
    size: 500, 320
    pos_hint: {'center_x': .5, 'center_y': .5}
    do_scroll_x: False

    GridLayout:
        cols: 1
        padding: 10
        spacing: 10
        size_hint_y: None
        height: self.minimum_height

        ScrollButton:
            text: '1'
        ScrollButton:
            text: '2'
        ScrollButton:
            text: '3'
        ScrollButton:
            text: '4'
        ScrollButton:
            text: '5'
        ScrollButton:
            text: '6'

<ScrollButton@Button>
    size_hint: None, None
    size: 480, 40

here, however we don't really have a way to dynamically create the children (well, there would be ways, but they are ugly), so i put a few manualy, idealy you would create the ScrollView and GridLayout in kv, and then put the children inside from python (using ids, as explained in the doc).

edit: more complete version using an app and ObjectProperty

kv file (scroll.kv):

ScreenManager:
    Screen:
        ScrollView:
            size_hint: None, None
            size: 500, 320
            pos_hint: {'center_x': .5, 'center_y': .5}

            GridLayout:
                cols: 1
                padding: 10
                spacing: 10
                height: self.minimum_height
                size_hint: None, None
                do_scroll_x: False
                id: container

<ScrollButton>
    size_hint: None, None
    size: 480, 40

python file (main.py):

from kivy.app import App
from kivy.uix.button import Button

class ScrollButton(Button):
    pass

class ScrollApp(App):
    def build(self):
        super(ScrollApp, self).build()
        container = self.root.ids.container
        for i in range(30):
            container.add_widget(ScrollButton(text=str(i)))
        return self.root   # return root does not work

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

Upvotes: 5

Related Questions