kivy标签位置差异
kivy label position differences
我试过在互联网上搜索来解决我的问题。但它根本没有结果。
所以。请查看此代码示例:
class RootWidget(FloatLayout):
def __init__(self, **kwargs):
super(RootWidget, self).__init__(**kwargs)
btn = Button(text='Hello world')
btn.size_hint = (1, .3)
btn.pos_hint = {'top':1}
title = Label(text=('[color=ff3333]Hello world[/color]'),
font_size=str(12) + 'sp', markup=True)
self.add_widget(title)
self.add_widget(btn)
title.texture_update()
title.text_size = (Window.width, None)
title.height = title.texture_size[1]
with title.canvas:
Color(1., 1., 0)
Rectangle(size=title.size, pos=title.pos)
print(title.size)
print(title.pos)
print(title.texture_size)
现在看图片:
谁能告诉我为什么 print(title.pos) 说 (0,0),canvas 在 (0,0) 处绘制矩形,但文本出现在另一个位置?
我已经不知所措了...
谢谢。
title
Label
位于 FloatLayout
Widget
的内部,其中 title.canvas
是从中绘制的。这就是 title.pos
是 (0,0)
的原因。 title.text
是您正在寻找的实际位置,但问题是 title.text
是一个字符串并且没有 pos
属性:/
您需要了解 Widget
作为 "container" 之类的东西与其内容之间的差异 - canvas 上绘制的内容。 Widget
需要占用一些 space,所以它确实如此。
Widget
的重要默认值是:
- 位置
[0, 0]
- size_hint
[1, 1]
- 尺寸
[100, 100]
你做了什么:
将文字大小更改为 [800 (by default), None]
title.text_size = (Window.width, None)
将小部件的高度设置为与呈现的文本具有相同的高度
title.height = title.texture_size[1]
这些更改对容器没有任何影响,因为您忘记了此布局中的基本内容,即:
FloatLayout honors the pos_hint and the size_hint properties of its children.
因此要么将 size_hint_y=None
放入 kwargs 中,要么在 title.size_hint_y=None
before 第一次设置高度。当 size_hint
正确地 set/removed 时,您可以操作容器,如果使用正确:
title = Label(...)
title.size_hint=[None, None]
title.size = title.texture_size
使容器封装呈现的文本。这使得渲染文本的位置与容器 (Widget
).
的位置相同
注意:遇到类似的东西,打印nice,但不如使用Inspector
模块有用,主要针对positioning/sizing/调试:
python main.py -m inspector
我试过在互联网上搜索来解决我的问题。但它根本没有结果。 所以。请查看此代码示例:
class RootWidget(FloatLayout):
def __init__(self, **kwargs):
super(RootWidget, self).__init__(**kwargs)
btn = Button(text='Hello world')
btn.size_hint = (1, .3)
btn.pos_hint = {'top':1}
title = Label(text=('[color=ff3333]Hello world[/color]'),
font_size=str(12) + 'sp', markup=True)
self.add_widget(title)
self.add_widget(btn)
title.texture_update()
title.text_size = (Window.width, None)
title.height = title.texture_size[1]
with title.canvas:
Color(1., 1., 0)
Rectangle(size=title.size, pos=title.pos)
print(title.size)
print(title.pos)
print(title.texture_size)
现在看图片:
谁能告诉我为什么 print(title.pos) 说 (0,0),canvas 在 (0,0) 处绘制矩形,但文本出现在另一个位置?
我已经不知所措了...
谢谢。
title
Label
位于 FloatLayout
Widget
的内部,其中 title.canvas
是从中绘制的。这就是 title.pos
是 (0,0)
的原因。 title.text
是您正在寻找的实际位置,但问题是 title.text
是一个字符串并且没有 pos
属性:/
您需要了解 Widget
作为 "container" 之类的东西与其内容之间的差异 - canvas 上绘制的内容。 Widget
需要占用一些 space,所以它确实如此。
Widget
的重要默认值是:
- 位置
[0, 0]
- size_hint
[1, 1]
- 尺寸
[100, 100]
你做了什么:
将文字大小更改为
[800 (by default), None]
title.text_size = (Window.width, None)
将小部件的高度设置为与呈现的文本具有相同的高度
title.height = title.texture_size[1]
这些更改对容器没有任何影响,因为您忘记了此布局中的基本内容,即:
FloatLayout honors the pos_hint and the size_hint properties of its children.
因此要么将 size_hint_y=None
放入 kwargs 中,要么在 title.size_hint_y=None
before 第一次设置高度。当 size_hint
正确地 set/removed 时,您可以操作容器,如果使用正确:
title = Label(...)
title.size_hint=[None, None]
title.size = title.texture_size
使容器封装呈现的文本。这使得渲染文本的位置与容器 (Widget
).
注意:遇到类似的东西,打印nice,但不如使用Inspector
模块有用,主要针对positioning/sizing/
python main.py -m inspector