如何在 Kivy 的滚动视图中将标签定位在屏幕中央?
How do you position a label in the center of screen in a scrollview within Kivy?
我在滚动视图中定位带有使用 canvas 添加的图像的标签时遇到困难。理想的输出是有一个带有文本内容的标签作为段落,然后是带有图像的标签,然后是另一个带有文本内容作为段落的标签。
图像显示在正确的垂直位置,如在两个文本标签之间,但当我尝试通过将 self.parent.width 乘以 .9 或其他任何方式缩小图像时,它不是定位中心小数点。它将它绑定到左侧屏幕并且标签中的填充不起作用,而它在带有文本内容的标签中起作用。我搜索了文档和其他示例,但找不到解决方案。如果有人对此有经验或可以提供任何指导,我将不胜感激。请在下面查看我的代码:
BoxLayout:
size_hint_y: .7
orientation: 'vertical'
canvas.before:
Color:
rgba: rgba('#FFFFFF')
Rectangle:
pos: self.pos
size: self.size
ScrollView:
id: sv
size_hint_y: None
height: self.parent.height
effect_cls: 'ScrollEffect'
GridLayout:
id: Content
cols: 1
size: self.minimum_size
size_hint: (1, None)
height: labelscroll1.texture_size[1]
Label:
id: labelscroll1
padding: ['20dp', '0dp']
color: rgba('#000000')
font_size: mtx.sp(14)
text_size: self.width, None
size: self.parent.width, self.texture_size[1]
size_hint: (None,None)
text: "Some text"
Label:
id: labelscroll2
padding: ['5dp','0dp']
size_hint: (None, None)
width: max(self.texture_size[0], self.parent.width)
height: 300
halign: 'center'
markup: True
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'Table.png'
Label:
id: labelscroll3
padding: ['20dp', '0dp']
color: rgba('#000000')
font_size: mtx.sp(14)
text_size: self.width, None
size: self.parent.width, self.texture_size[1]
size_hint: (None,None)
text: "Some text"
实际代码中的缩进是四个空格,但由于粘贴,此处的格式可能略有偏差。
没有看到你的实际代码,我只能猜测到底是什么问题。但是,将某些内容置于 GridLayout
单元格中心的一个好方法是使用 AnchorLayout
。尝试将 kv
中的中间 Label
替换为:
AnchorLayout:
size_hint: (1.0, None)
height: 300
Label:
id: labelscroll2
padding: ['5dp','0dp']
size_hint: (None, None)
width: max(self.texture_size[0], self.parent.width)
height: 300
halign: 'center'
markup: True
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'Table.png'
我在滚动视图中定位带有使用 canvas 添加的图像的标签时遇到困难。理想的输出是有一个带有文本内容的标签作为段落,然后是带有图像的标签,然后是另一个带有文本内容作为段落的标签。
图像显示在正确的垂直位置,如在两个文本标签之间,但当我尝试通过将 self.parent.width 乘以 .9 或其他任何方式缩小图像时,它不是定位中心小数点。它将它绑定到左侧屏幕并且标签中的填充不起作用,而它在带有文本内容的标签中起作用。我搜索了文档和其他示例,但找不到解决方案。如果有人对此有经验或可以提供任何指导,我将不胜感激。请在下面查看我的代码:
BoxLayout:
size_hint_y: .7
orientation: 'vertical'
canvas.before:
Color:
rgba: rgba('#FFFFFF')
Rectangle:
pos: self.pos
size: self.size
ScrollView:
id: sv
size_hint_y: None
height: self.parent.height
effect_cls: 'ScrollEffect'
GridLayout:
id: Content
cols: 1
size: self.minimum_size
size_hint: (1, None)
height: labelscroll1.texture_size[1]
Label:
id: labelscroll1
padding: ['20dp', '0dp']
color: rgba('#000000')
font_size: mtx.sp(14)
text_size: self.width, None
size: self.parent.width, self.texture_size[1]
size_hint: (None,None)
text: "Some text"
Label:
id: labelscroll2
padding: ['5dp','0dp']
size_hint: (None, None)
width: max(self.texture_size[0], self.parent.width)
height: 300
halign: 'center'
markup: True
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'Table.png'
Label:
id: labelscroll3
padding: ['20dp', '0dp']
color: rgba('#000000')
font_size: mtx.sp(14)
text_size: self.width, None
size: self.parent.width, self.texture_size[1]
size_hint: (None,None)
text: "Some text"
实际代码中的缩进是四个空格,但由于粘贴,此处的格式可能略有偏差。
没有看到你的实际代码,我只能猜测到底是什么问题。但是,将某些内容置于 GridLayout
单元格中心的一个好方法是使用 AnchorLayout
。尝试将 kv
中的中间 Label
替换为:
AnchorLayout:
size_hint: (1.0, None)
height: 300
Label:
id: labelscroll2
padding: ['5dp','0dp']
size_hint: (None, None)
width: max(self.texture_size[0], self.parent.width)
height: 300
halign: 'center'
markup: True
canvas.before:
Rectangle:
pos: self.pos
size: self.size
source: 'Table.png'