我试过在互联网上寻求解决我的问题。但它根本没有结果。 所以。请查看此代码示例:
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),画布在(0,0)绘制矩形但是文本出现在另一个位置?
我已经不知所措......
谢谢。
答案 0 :(得分:4)
您需要看到Widget
作为“容器”之类的东西与其内容之间的差异 - 画布上绘制的内容。 Widget
需要占用一些空间,因此确实如此。
Widget
的重要默认值为:
[0, 0]
[1, 1]
[100, 100]
你做了什么:
将文字大小更改为[800 (by default), None]
title.text_size = (Window.width, None)
将窗口小部件的高度设置为与渲染文本具有相同的高度
title.height = title.texture_size[1]
这些更改对容器没有任何作用,因为您忘记了此布局中的基本内容,即:
FloatLayout尊重其子项的pos_hint和size_hint属性。
因此,要么先将size_hint_y=None
放入kwargs,要么在首次设置高度之前执行title.size_hint_y=None
。正确设置/删除size_hint
时,您可以操作容器,如果使用正确:
title = Label(...)
title.size_hint=[None, None]
title.size = title.texture_size
使容器封装渲染的文本。这使得渲染文本的位置与容器(Widget
)的位置相同。
注意:当遇到类似的东西时,打印很好,但没有使用Inspector
模块那么有用,主要用于定位/调整大小/<任何布局相关的东西>调试:
python main.py -m inspector
答案 1 :(得分:0)
title
Label
位于FloatLayout
所在的Widget
title.canvas
内。这就是title.pos
为(0,0)
的原因。 title.text
是您要查找的实际位置,但问题是title.text
是一个字符串,并且没有pos
属性:/