kivy标签位置差异

stP*_*nix 0 python label kivy

我试过在互联网上寻找解决我的问题。但它根本没有结果。所以。请查看此代码示例:

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)处绘制矩形但文本出现在另一个位置?

我已经被这个淹没了......

谢谢你。

Key*_*Usr 5

您需要看到Widget作为“容器”之类的事物与其内容之间的差异- 在画布上绘制的内容。AWidget需要占用一些空间,因此它确实如此。

a 的重要默认值Widget是:

  • 位置   [0, 0]
  • 大小提示 [1, 1]
  • 尺寸         [100, 100]

你做了什么:

  1. 将文本大小更改为 [800 (by default), None]

    title.text_size = (Window.width, None)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 设置小部件的高度以与呈现的文本具有相同的高度

    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)