我试过在互联网上寻找解决我的问题。但它根本没有结果。所以。请查看此代码示例:
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)
Run Code Online (Sandbox Code Playgroud)
现在看看图像:

谁能告诉我为什么打印(title.pos)说(0,0),画布在(0,0)处绘制矩形但文本出现在另一个位置?
我已经被这个淹没了......
谢谢你。
您需要看到Widget作为“容器”之类的事物与其内容之间的差异- 在画布上绘制的内容。AWidget需要占用一些空间,因此它确实如此。
a 的重要默认值Widget是:
[0, 0][1, 1][100, 100]你做了什么:
将文本大小更改为 [800 (by default), None]
title.text_size = (Window.width, None)
Run Code Online (Sandbox Code Playgroud)设置小部件的高度以与呈现的文本具有相同的高度
title.height = title.texture_size[1]
Run Code Online (Sandbox Code Playgroud)这些更改对容器没有任何作用,因为您忘记了此布局中的一个基本内容,即:
FloatLayout 尊重其子项的 pos_hint 和 size_hint 属性。
因此,要么放入size_hint_y=Nonekwargs 要么在第一次设置高度title.size_hint_y=None 之前做。当size_hint正确设置/删除时,您可以操作容器,如果使用正确:
title = Label(...)
title.size_hint=[None, None]
title.size = title.texture_size
Run Code Online (Sandbox Code Playgroud)
使容器封装呈现的文本。这使得渲染文本的位置与具有容器 ( Widget)的位置相同。
注意:遇到类似的东西,打印是好的,但不如使用Inspector模块有用,主要用于定位/调整大小/<任何与布局相关的东西>调试:
python main.py -m inspector
Run Code Online (Sandbox Code Playgroud)