【问题标题】:Error on ScrollView+StackLayout when binding minimum_height on Kivy在 Kivy 上绑定 minimum_height 时 ScrollView+StackLayout 出错
【发布时间】:2014-11-17 15:36:27
【问题描述】:

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

我正在使用带有 Python 版本 3.3.3 的适用于 Windows 的 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

【问题讨论】:

    标签: python windows scrollview kivy


    【解决方案1】:

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

    您告诉 Kivy 您想要基于 StackLayout 大小的 Button 大小,同时还想要基于组合 Buttons 大小的 StackLayout 大小。

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

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

    【讨论】:

    • 谢谢,我试过了,它成功了!现在你已经解释过了。
    • @Ryan P,忽略此错误对应用程序或操作系统的运行有任何影响吗?在我的情况下,一旦加载动态按钮,错误迭代就会停止。
    猜你喜欢
    • 2017-09-18
    • 1970-01-01
    • 2019-08-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-21
    • 2016-08-13
    • 1970-01-01
    • 2020-08-20
    相关资源
    最近更新 更多