Kivy模板视图限制

时间:2014-11-22 11:44:16

标签: python kivy

在滚动视图中嵌套一些小部件给了我这个错误

 Exception Exception: Exception('Cannot push more than 8 level of stencil. (stack overflow)',) in 'kivy.graphics.stencil_instructions.StencilPush.apply' ignored

我知道不能堆叠超过8个模板感知对象;但是我想知道这实际意味着什么:在此之前我在一个布局中堆叠了超过8个交互式对象,但这次不起作用。

我的代码很长,所以我不能在这里写它,它是一个复杂的嵌套不同类型的小部件,它们管理着不同的交互。我想知道模板视图的这种限制是否限制了我对kivy的使用,或者它可能是一个糟糕的管理方式。

[编辑]

以下是使用滚动视图的小部件布局

class Edit_area(ScrollView):

    def __init__(self,**kw):
        super(Edit_area, self).__init__(**kw)
        self.scroll_area_wrapper = Widget()
        self.layout = BoxLayout(orientation = 'horizontal')
        self.graph = Graph(xlabel='Time', ylabel='Posizione',
        x_ticks_major=100, y_ticks_major=2,
        y_grid_label=True, x_grid_label=True, padding=0,
        x_grid=True, y_grid=True, xmin=0, xmax=1000, ymin=0, ymax=10, draw_border = True)

        self.layout.add_widget(self.graph)
        self.scroll_area_wrapper.add_widget(self.layout)
        self.line = Editable_line()
        self.scroll_area_wrapper.add_widget(self.line)

        self.add_widget(self.scroll_area_wrapper)

因为scrollView只接受一个小部件,所以我使用了一个包装器来添加所有元素。 此外,元素'line'在其中有更多其他小部件,如'point'和'spline points'。 Graph是kivy-garden图表包的类

1 个答案:

答案 0 :(得分:0)

发现问题。 我写了一些错误的代码,试图在彼此内部实例化更多的模板视图。

我知道模板视图的限制纯粹与scrollview(当然还有stencilView类本身)有关,因为它是唯一一个继承此类的人。

因此,您无法在彼此内部实现超过8个scrollview,这看起来非常好。

class stencilTest(App):
     def build(self):
        super(stencilTest, self).__init__()
        root = GridLayout(cols=1, spacing=10, size_hint_y=None)
        r = root
        for i in range(10):
            w = ScrollView(size_hint=(1, 1), size=(1000, 800))
            r.add_widget(w)
            r = r.children[0]       
        return root


if __name__ == "__main__":
     stencilTest().run()

如果感兴趣,此代码将重现错误