如何使Kivy屏幕的一部分可滚动

时间:2016-08-26 15:57:13

标签: python kivy kivy-language

我希望使用以下格式的Kivy库在Python中制作页面

    ________________________
    |                      |
    |        title         |
    |______________________|
  >>|       Example 1      |<<
    |______________________|
    |           |          |
    |___________|__________|
    |           |          |
    |___________|__________|
    |           |          |
  >>|___________|__________|<<
    |         Home         |
    |______________________|
    |       Settings       |
    |______________________|         

箭头之间的屏幕部分应该是可滚动的。到目前为止我的代码如下:

Kv档案:

<ExampleScreen>:
BoxLayout:
    orientation: 'vertical'
    Label:
        text: 'title'
    ScrollView:
        GridLayout:
            cols: 1
            Label:
                text: 'Example 1'
            GridLayout:
                cols: 2
                rows: 4
                Label: 
                    text: 'Filler'
                Label:
                    text: 'Filler'
                Label:
                    text: 'Filler'
                Label:
                    text: 'Filler'
                Label: 
                    text: 'Filler'
                Label:
                    text: 'Filler'
                Label:
                    text: 'Filler'
                Label:
                    text: 'Filler'
    Button: 
        text: 'Home'
        size_hint: 1, .1
        on_press: root.manager.current = 'home'
    Button:
        text: 'Settings'
        size_hint: 1, .1
        on_press: root.manager.current = 'settings' 

Py文件:

from kivy.uix.gridlayout import GridLayout
from kivy.uix.scrollview import ScrollView
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.uix.button import Button
from kivy.lang import Builder

Builder.load_file('example.kv')

class ExampleScreen(Screen):
    pass

sm = ScreenManager()

sm.add_widget(ExampleScreen(name = 'example'))

class TestApp(App):
    def build(self):
        return sm

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

我尝试过这几种方式,但没有任何效果。有没有其他人有这方面的经验/知道这是否可能?谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

是的,如果你得到缩进和尺寸提示,那是可能的。
ScrollView doc

试试这个:

<MyLabel@Label>:
    size_hint:1,None

<ExampleScreen>:
    BoxLayout:
        orientation: 'vertical'
        Label:
            text: 'title'
        ScrollView:
            size_hint: 1,None
            GridLayout:
                size_hint: 1,None
                height: self.minimum_height
                cols: 1
                MyLabel:
                    text: 'Example 1'
                GridLayout:
                    size_hint: 1,None
                    height: self.minimum_height
                    cols: 2
                    rows: 4                
                    MyLabel:
                        text: 'Filler' 
                    MyLabel:
                        text: 'Filler'
                    MyLabel:
                        text: 'Filler'
                    MyLabel:
                        text: 'Filler'
                    MyLabel: 
                        text: 'Filler'
                    MyLabel:
                        text: 'Filler'
                    MyLabel:
                        text: 'Filler'
                    MyLabel:
                        text: 'Filler'

        Button: 
            text: 'Home'
            size_hint: 1, .1
            on_press: root.manager.current = 'home'
        Button:
            text: 'Settings'
            size_hint: 1, .1
            on_press: root.manager.current = 'settings'