在Kivy上绑定minimum_height时ScrollView + StackLayout出错

时间:2014-11-17 15:36:27

标签: python windows scrollview kivy

我是Kivy的新手,我正在尝试使用Kivy文档上的官方ScrollView example创建滚动视图。

我正在使用适用于Windows 3.3版的Kivy便携包。

当我尝试运行下面的代码并且layout.bind行取消注释时,我得到了以下错误的重复行:

  

警告,在下一帧之前完成了太多的迭代。检查您的代码,或增加Clock.max_iteration属性

当我评论layout.bind行时,我得到一个正常的启动,我添加的按钮我想要它们,但滚动不起作用。

from kivy.app import App
from kivy.uix.scrollview import ScrollView
from kivy.uix.stacklayout import StackLayout
from kivy.uix.button import Button

class Example(App):

    def build(self):
        layout = StackLayout(size_hint_y=None)

        # If i uncomment this line, i got the error:
        # layout.bind(minimum_height=layout.setter('height'))
        for i in range(30):
            btn = Button(text=str(i), size_hint=(.33,.8))
            layout.add_widget(btn)

        root = ScrollView(size_hint=(None,None), size=(400, 400))
        root.add_widget(layout)
        return root

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

问题是为什么滚动不起作用?以及layout.bind导致错误的原因。

如何在没有错误的情况下使用相同的视觉效果和滚动条在x轴上工作?

我让这段代码尽可能接近Kivy官方example

1 个答案:

答案 0 :(得分:0)

这种情况正在发生,因为您正在创建一个无限循环。每个Button的大小是根据StackLayout的大小设置的。这会导致StackLayout的尺寸增加,导致Button尺寸重新计算,导致StackLayout无限大小增加。

您告诉Kivy您希望基于Button尺寸的StackLayout尺寸,同时还希望StackLayout尺寸基于合并的Button尺寸。

要解决此问题,您需要指定实际尺寸,而不是使用size_hint

btn = Button(text=str(i), size_hint=(None, None), size=(100, 100))