我是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。
答案 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))