我有点为难。在使用 Kivy 的 ScrollView 布局和(当前实验性的)reStructuredText 渲染器模块时,我遇到了一个小问题。每当我运行代码时,我的终端都会向我发送垃圾邮件:
[CRITICAL] [Clock] Warning, too much iteration done before the next frame. Check your code, or increase the Clock.max_iteration attribute
现在,应用程序似乎运行得很好,直到你进入 ScrollView 布局中包含 rST 文档的页面。该页面会出现各种奇怪的情况。主滚动视图将缓慢向下滚动,直到页面变白,并且 rST 文档的位置很奇怪,略微向左移动。
但是,当我删除文档时,屏幕和应用程序表现得非常正常,运行顺畅。有人知道我该如何修复这个问题,让页面正常工作吗?(我是否提到过 rST 文档最初位于旋转木马中,但我取出了旋转木马以查看是否是问题所在。)以下是 Kivy 语言代码:
<Page>: orientation: 'vertical' ScrollView: size_hint: (.99, .99) StackLayout: size_hint_y: None id: content_layout height: self.minimum_height WrappedLabel: text: "Test" font_size: min(root.height, root.width) RstDocument: underline_color: 'blue' text:("Some Text")
问题是否是 rST 文档恰好基于 ScrollView 布局?
有时height: self.minimum_height类似的事情就像搬起石头砸自己的脚。一定要先尝试注释掉这些内容,因为如果您不做一些花哨的事情,那么尺寸就是问题所在。
height: self.minimum_height
现在,为什么这是一个问题?StackLayout它的minimum_height集合来自minimum_size,我认为它是在这里某处设置的,并且具有某个非零的初始值。
StackLayout
minimum_height
minimum_size
不过不要混淆,minimum_height一开始默认为零,但之后可能会在每次添加小部件时重新计算。如果您on_height: print(self.height)在之后添加height: self.minimum_height,您就会明白我的意思。
on_height: print(self.height)
为什么会这样?很简单!你没有为这些子项设置绝对大小(每个子项都有size_hint == [1, 1])。
size_hint == [1, 1]
另外,ScrollView如果我没记错的话,预计尺寸会比 ScrollView 大一些(这样它才能滚动)。
ScrollView
from kivy.lang import Builder from kivy.base import runTouchApp from kivy.uix.boxlayout import BoxLayout Builder.load_string(''' <Test>: orientation: 'vertical' ScrollView: size_hint: (.99, .99) StackLayout: size_hint_y: None id: content_layout height: self.minimum_height on_height: print(self.height) Label: size_hint: None, None size: 100, 30 text: "Test" font_size: min(root.height, root.width) RstDocument: size_hint: None, None size: 100, 1000 underline_color: 'blue' text:("Some Text") ''') class Test(BoxLayout): pass runTouchApp(Test())
把孩子带走size_hint,size你就有了自己的too much iteration孩子。
size_hint
size
too much iteration