kivy标签位置差异

时间:2016-10-15 18:04:52

标签: 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)

现在看图像:

Label position

有谁可以告诉我为什么print(title.pos)说(0,0),画布在(0,0)绘制矩形但是文本出现在另一个位置?

我已经不知所措......

谢谢。

2 个答案:

答案 0 :(得分:4)

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

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]
    
  3. 这些更改对容器没有任何作用,因为您忘记了此布局中的基本内容,即:

      

    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属性:/