【问题标题】:Kivy: ScrollViewApp example in Kivy LanguageKivy:Kivy 语言中的 ScrollViewApp 示例
【发布时间】:2013-06-05 01:30:56
【问题描述】:

我在 Kivy 语言和 Python 语言的概念之间来回切换时遇到了麻烦。我不太擅长解释事情,我已经考虑过如何解释我的具体问题,但我能想到的最好方法是:

如何使用Builder 函数实现ScrollViewApp?

【问题讨论】:

    标签: python kivy


    【解决方案1】:

    嗯,有点像

    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
    

    在这里,但是我们真的没有办法动态创建子项(嗯,会有办法,但它们很丑),所以我手动放了一些,理想情况下你会在 kv 中创建 ScrollView 和 GridLayout ,然后将子项从 python 中放入(使用 id,如文档中所述)。

    编辑:使用应用程序和 ObjectProperty 的更完整版本

    kv 文件(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 文件(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()
    

    【讨论】:

    • 你看到了问题所在。我的“ScrollViewApp”将是我的 ScreenManager 中的屏幕之一。我想使用 ObjectProperty 作为参考动态地将按钮附加到滚动条,但没有骰子。真的没有等效的方法吗?
    • 为了给你一些背景知识,这是一个待办事项列表应用程序。按钮将是从存储表中调用的任务。
    • 已编辑以显示一个更完整的应用程序,应该让您走上正轨。
    • 这似乎造成了更多问题,但您确实回答了我的问题。谢谢你,@tshirtman。
    • 不需要root.ids.['container'](),你可以直接使用root.ids.container。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    相关资源
    最近更新 更多