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]

你做了什么:

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

    title.text_size = (Window.width, None)
    
  2. 将小部件的高度设置为与呈现的文本具有相同的高度

    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