Python kivy scrollview与boxlayout
我现在正在熟悉kivy。 我认为它有很大的潜力,但我确实发现“普通python”和kv语言之间的关系有点令人困惑,这使得我很难理解在哪里执行项目。目前,在我看来,在使用python vs kv-l时,行为(幕后发生的事情)不是一对一的,总的来说,我认为这使得可用性/生产率的标准相当高 我和其他人一起参加了《险恶》的“速成班”,这是给kivy留下第一印象的一个很好的开始。 无论如何,在学习的过程中,我只是想看看我是否可以使一个框视图可滚动-结果是我不能 需要什么才能使这段代码起作用,即将标签扩展到其“纹理大小”,同时拥有一个可调整的滚动视图 如果BoxLayout有一个size\u hint\u y:None,则标签不会扩展到文本,但是当窗口变小时,可以看到滚动视图的作用 如果BoxLayout有一个size\u hint\u y:1,则标签将展开,但BoxLayout的高度显然没有任何变化,即scrollview窗口似乎与size\u hint\u y:None相同 如果我只输入一个大的高度,scrollview会覆盖这个,但我希望可以获得boxlayout的动态高度,并将其与内容相结合 我已经尝试过高度、大小提示等,但我没有找到一种有效的组合,有时会收到警告,指出由于内部重画循环,代码需要重新生成 我缺少/不理解什么 代码如下所示Python kivy scrollview与boxlayout,python,kivy,Python,Kivy,我现在正在熟悉kivy。 我认为它有很大的潜力,但我确实发现“普通python”和kv语言之间的关系有点令人困惑,这使得我很难理解在哪里执行项目。目前,在我看来,在使用python vs kv-l时,行为(幕后发生的事情)不是一对一的,总的来说,我认为这使得可用性/生产率的标准相当高 我和其他人一起参加了《险恶》的“速成班”,这是给kivy留下第一印象的一个很好的开始。 无论如何,在学习的过程中,我只是想看看我是否可以使一个框视图可滚动-结果是我不能 需要什么才能使这段代码起作用,即将标签扩展到
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())
从kivy.base导入runTouchApp
从kivy.lang导入生成器
从kivy.uix.scrollview导入scrollview
生成器。加载\u字符串(“”)
:
盒子布局:
方向:“垂直”
#尺寸提示:1
尺寸提示:无
身高:400#自身尺寸[1]
画布:
颜色:
rgba:(1,0,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
id:半身像
文本:“一个长字符串”*10
字体大小:50
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
画布:
颜色:
rgba:(0,1,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
文本:“2个长字符串”*10
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
按钮:
文字:“只是测试”
""")
类ScrollableLabel(ScrollView):
通过
runTouchApp(ScrollableLabel())
BoxLayout的设计目的是让其子项自行填充。对于动态调整大小,更好的布局是GridLayout,它有一个最小的\u高度,您可以绑定到该高度进行自动调整大小
<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'
""")
:
网格布局:
科尔斯:1
尺寸提示:无
高度:自身最小高度
画布:
颜色:
rgba:(1,0,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
id:半身像
文本:“一个长字符串”*10
字体大小:50
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
画布:
颜色:
rgba:(0,1,0,5)#暗绿色
矩形:
大小:self.size
pos:self.pos
标签:
文本:“2个长字符串”*10
文本大小:self.width,无
尺寸提示:无
高度:自身纹理大小[1]
按钮:
文字:“只是测试”
""")
谢谢,这一切都如期实现了,我自己是不会想到的。