为什么 Kivy ScrollView children of child 不可滚动?
Why Kivy ScrollView children of child are not scrollable?
这是 python-script 运行 kivy:
的一部分
class someclass(Widget):
# code
# code
Clock.schedule_interval(self.timeandlog, 0.1)
self.x = 20
def timeandlog(self,dt):
if condition == True: #
self.ids.pofchild.add_widget(Label(text=logmsg, pos = (10, self.x)))
self.x = self.x + 10 ### just playing with position
condition = False
kv 文件:
<someclass>
#somelabels and buttons:
ScrollView:
do_scroll_x: False
do_scroll_y: True
pos: root.width*0.3, root.height*0.7
size: root.width*0.8, root.height*0.7
Widget:
cols: 1
spacing: 10
id: pofchild
现在我知道 ScrollView
接受一个 Widget
所以我只添加了一个 id: pofchild
然后我在里面添加了标签 self.ids.pofchild.add_widget(Label()
并更改每个新标签的pos
与 pos=(20, self.x)
但标签不可滚动且仅填充小部件高度然后停止出现。什么是正确的属性以便它们可以滚动?
一般来说,当你想要Widget
包含其他Widgets
时,你应该使用Layout
Widget
。简单的 Widget
不支持 size_hint
或 pos_hint
,因此简单的 Widget
的 children 通常以默认大小 (100,100) 结束,并且默认位置 (0,0).
所以,一个好的开始是改变:
class someclass(Widget):
类似于:
class Someclass(FloatLayout):
请注意,class 名称以大写字母开头。虽然它不会在您的示例中造成任何困难,但当您使用 kv
并且您的 classname 以小写字母开头时,它可能会产生错误。
同样,ScrollView
的 child 通常也是 Layout
。一种可能是GridLayout
,像这样:
GridLayout:
size_hint_y: None
height: self.minimum_height
cols: 1
spacing: 10
id: pofchild
这里的Keys属性是size_hint_y: None
和height: self.minimum_height
。它们允许 GridLayout
随着更多 children 的添加而增长,其高度将计算为包含 children 所需的最小高度。
然后,你可以这样添加children:
self.ids.pofchild.add_widget(Label(text=logmsg, pos=(10, self.x), size_hint_y=None, height=50))
由于我们期望 GridLayout
计算其最小高度,我们必须为其 children 提供明确的 height
,因此 size_hint_y=None, height=50
.
这是 python-script 运行 kivy:
的一部分class someclass(Widget):
# code
# code
Clock.schedule_interval(self.timeandlog, 0.1)
self.x = 20
def timeandlog(self,dt):
if condition == True: #
self.ids.pofchild.add_widget(Label(text=logmsg, pos = (10, self.x)))
self.x = self.x + 10 ### just playing with position
condition = False
kv 文件:
<someclass>
#somelabels and buttons:
ScrollView:
do_scroll_x: False
do_scroll_y: True
pos: root.width*0.3, root.height*0.7
size: root.width*0.8, root.height*0.7
Widget:
cols: 1
spacing: 10
id: pofchild
现在我知道 ScrollView
接受一个 Widget
所以我只添加了一个 id: pofchild
然后我在里面添加了标签 self.ids.pofchild.add_widget(Label()
并更改每个新标签的pos
与 pos=(20, self.x)
但标签不可滚动且仅填充小部件高度然后停止出现。什么是正确的属性以便它们可以滚动?
一般来说,当你想要Widget
包含其他Widgets
时,你应该使用Layout
Widget
。简单的 Widget
不支持 size_hint
或 pos_hint
,因此简单的 Widget
的 children 通常以默认大小 (100,100) 结束,并且默认位置 (0,0).
所以,一个好的开始是改变:
class someclass(Widget):
类似于:
class Someclass(FloatLayout):
请注意,class 名称以大写字母开头。虽然它不会在您的示例中造成任何困难,但当您使用 kv
并且您的 classname 以小写字母开头时,它可能会产生错误。
同样,ScrollView
的 child 通常也是 Layout
。一种可能是GridLayout
,像这样:
GridLayout:
size_hint_y: None
height: self.minimum_height
cols: 1
spacing: 10
id: pofchild
这里的Keys属性是size_hint_y: None
和height: self.minimum_height
。它们允许 GridLayout
随着更多 children 的添加而增长,其高度将计算为包含 children 所需的最小高度。
然后,你可以这样添加children:
self.ids.pofchild.add_widget(Label(text=logmsg, pos=(10, self.x), size_hint_y=None, height=50))
由于我们期望 GridLayout
计算其最小高度,我们必须为其 children 提供明确的 height
,因此 size_hint_y=None, height=50
.