带框布局的 kivy 滚动视图
kivy scrollview with boxlayout
我现在正在熟悉 kivy。
我认为它有很大的潜力,但我确实发现 "normal python" 和 kv 语言之间的关系有点混乱,这使得很难理解在哪里做项目。目前在我看来,使用 python 与 kv-l 时的行为(幕后发生的事情)并不是一对一的,总的来说,我认为 [=32 的门槛很高=].
我和其他人一起使用了 "crash course" by inclement,这是获得对 kivy 的第一印象的良好开端。
总之,在学习的过程中,我只是想看看我能不能把一个框视图做成可滚动的——结果我做不到。
需要什么才能使此代码正常工作,即将标签扩展到它们的 "texture-size",同时有一个 ScrollView 来适应它?
如果 BoxLayout 有一个 size_hint_y: None,标签不会扩展到文本,但是当 window 非常小时可以看到滚动视图正在运行。
如果 BoxLayout 有一个 size_hint_y: 1,标签被展开,但显然 boxlayout 的高度根本没有改变,即 scrollview window 似乎与size_hint_y: None
如果我只是输入一个较大的高度,滚动视图会覆盖它,但我希望可以获得与其内容相结合的 boxlayout 的动态高度。
我试过高度,size_hints,等等,但我没有找到有效的组合,有时会收到警告,由于内部重绘循环需要重新编写代码?
我missing/not了解什么?
代码如下。
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView
Builder.load_string("""
<ScrollableLabel>:
BoxLayout:
orientation: 'vertical'
# size_hint_y: 1
size_hint_y: None
height: 400 #self.size[1]
canvas:
Color:
rgba: (1, 0, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
id: bust
text: 'a string that is long ' * 10
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
canvas:
Color:
rgba: (0, 1, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
text: '2 strings that are long ' * 10
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
Button:
text: 'just testing'
""")
class ScrollableLabel(ScrollView):
pass
runTouchApp(ScrollableLabel())
BoxLayout 旨在让其子项自行填充。您想要的动态调整大小的更好布局是 GridLayout,它有一个 minimum_height 可以绑定到自动调整大小。
<ScrollableLabel>:
GridLayout:
cols: 1
size_hint_y: None
height: self.minimum_height
canvas:
Color:
rgba: (1, 0, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
id: bust
text: 'a string that is long ' * 10
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
canvas:
Color:
rgba: (0, 1, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
text: '2 strings that are long ' * 10
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
Button:
text: 'just testing'
""")
我现在正在熟悉 kivy。 我认为它有很大的潜力,但我确实发现 "normal python" 和 kv 语言之间的关系有点混乱,这使得很难理解在哪里做项目。目前在我看来,使用 python 与 kv-l 时的行为(幕后发生的事情)并不是一对一的,总的来说,我认为 [=32 的门槛很高=].
我和其他人一起使用了 "crash course" by inclement,这是获得对 kivy 的第一印象的良好开端。 总之,在学习的过程中,我只是想看看我能不能把一个框视图做成可滚动的——结果我做不到。
需要什么才能使此代码正常工作,即将标签扩展到它们的 "texture-size",同时有一个 ScrollView 来适应它?
如果 BoxLayout 有一个 size_hint_y: None,标签不会扩展到文本,但是当 window 非常小时可以看到滚动视图正在运行。
如果 BoxLayout 有一个 size_hint_y: 1,标签被展开,但显然 boxlayout 的高度根本没有改变,即 scrollview window 似乎与size_hint_y: None
如果我只是输入一个较大的高度,滚动视图会覆盖它,但我希望可以获得与其内容相结合的 boxlayout 的动态高度。
我试过高度,size_hints,等等,但我没有找到有效的组合,有时会收到警告,由于内部重绘循环需要重新编写代码?
我missing/not了解什么?
代码如下。
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.scrollview import ScrollView
Builder.load_string("""
<ScrollableLabel>:
BoxLayout:
orientation: 'vertical'
# size_hint_y: 1
size_hint_y: None
height: 400 #self.size[1]
canvas:
Color:
rgba: (1, 0, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
id: bust
text: 'a string that is long ' * 10
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
canvas:
Color:
rgba: (0, 1, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
text: '2 strings that are long ' * 10
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
Button:
text: 'just testing'
""")
class ScrollableLabel(ScrollView):
pass
runTouchApp(ScrollableLabel())
BoxLayout 旨在让其子项自行填充。您想要的动态调整大小的更好布局是 GridLayout,它有一个 minimum_height 可以绑定到自动调整大小。
<ScrollableLabel>:
GridLayout:
cols: 1
size_hint_y: None
height: self.minimum_height
canvas:
Color:
rgba: (1, 0, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
id: bust
text: 'a string that is long ' * 10
font_size: 50
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
canvas:
Color:
rgba: (0, 1, 0, .5) # DarkOliveGreen
Rectangle:
size: self.size
pos: self.pos
Label:
text: '2 strings that are long ' * 10
text_size: self.width, None
size_hint_y: None
height: self.texture_size[1]
Button:
text: 'just testing'
""")