【问题标题】:Kivy access gridlayout within scrollview dynamically in pythonKivy在python中动态访问scrollview中的gridlayout
【发布时间】:2021-01-29 16:19:13
【问题描述】:

我正在尝试将标签/按钮添加到 Scrollview 中的 GridLayout,但不知何故我无法在 python 中访问 GridLayout。 考虑以下 .kv 部分

<DrvList>
    ScrollView:
        size_hint: (None, None)
        size: 0.95, 0.95
        GridLayout:
            minimum_height: self.height
            id: grid
            size_hint_y: None
            rows: 3
            cols: 1

和一个简化的相应 Python 部分

class DrvList(ScrollView):
    selection = StringProperty()

    def __init__(self, *args, **kwargs):
        super(DrvList, self).__init__(*args, **kwargs)
        self._src = ["C", "D", "E"]
        for x in self._src:
            self.grid.add_widget(ToggleButton(id=x, text=x))
        DrvList.selection = self._src[0]

我收到一个错误

 AttributeError: 'DrvList' object has no attribute 'grid'

那么我怎样才能访问网格?另外,关于使这样的列表“可拖放”以便我可以通过视觉反馈在列表中移动项目的任何建议?但目前最重要的问题是如何访问网格。 self.ids.grid 也不起作用...

编辑:Kivy >= 1.11.x,所以不是 1.10 或以下

【问题讨论】:

    标签: python kivy scrollview


    【解决方案1】:

    您的代码存在一些问题。首先是ids 是在应用kv 规则时创建的,我必须承认,当这些ids 实际可用时似乎很难定义。但是,通常当ids 不可用时,可以通过使用Clock.schedule_once() 来克服,如下所示:

    class DrvList(ScrollView):
        selection = StringProperty()
    
        def __init__(self, *args, **kwargs):
            super(DrvList, self).__init__(*args, **kwargs)
            Clock.schedule_once(self.setup)
    
        def setup(self, dt):
            self._src = ["C", "D", "E"]
            for x in self._src:
                self.ids.grid.add_widget(ToggleButton(id=x, text=x))
            self.selection = self._src[0]   # Properties should be referenced using "self"
    

    另外,请注意在您的kv 中,以下行:

        size_hint: (None, None)
        size: 0.95, 0.95
    

    ScrollView 的大小设置为小于 1 x 1 像素,因此它可能不可见。

    另一个注意事项是您的kvScrollView 放在DrvList 中,但DrvListScrollView,因此您将ScrollView 放在ScrollView 中,这可能会导致困难当您尝试实际滚动时。

    【讨论】:

    • 您好,非常感谢您的详细说明。我刚开始使用 kivy,仍然需要习惯它。我在编写一个类时假设我必须在这里“重复”诸如 Scrollview 之类的基类,但你是对的,然后它们就会嵌套。同时,我完全删除了 kv 文件,并在类 init 方法中创建了一个网格布局。这似乎工作正常,不依赖于正在创建的内部结构。感谢您对日程安排的评论,这通常会在设置时有所帮助!
    猜你喜欢
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多