我对Kivy真的很陌生,我试图在画布上放置一些文字,但我发现使用的Label
我没有正确定位。如果我正在使用相同的值绘制Rectangle
,则它具有正确的位置。
我在这里发现了一些类似的问题,但我认为对我没有答案。
这是我的代码:
class MyClass(Widget):
def __init__(self, **kwargs):
super(MyClass, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self._keyboard.bind(on_key_down=self._on_keyboard_down)
def _keyboard_closed(self):
pass
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
with self.canvas:
lbl_staticText = Label(font_size=12)
lbl_staticText.text = 'This is some nice random text\nwith linebreak'
lbl_staticText.texture_update()
textSize = lbl_staticText.texture_size
Rectangle(pos=(1024/2 - textSize[0]/2, 600), size=(textSize[0], textSize[1])); #Rectangle with same position and same size
lbl_staticText.pos = (1024/2 - textSize[0]/2, 600)
结果如下:
正如您所见,Rectangle
位置按预期水平居中,但Label
既没有居中也没有正确的高度位置。
请告诉我为什么会有区别?
谢谢!
答案 0 :(得分:1)
好吧,你忘了检查标签的大小了。默认值始终为[100, 100]
。您没有将Label
作为子项添加到任何位置,因此它会忽略size_hint
,默认设置为[1, 1]
。
最终结果:
Label
小部件区域为[100, 100]
Label
纹理为[something, something]
(对我而言[160, 32]
)现在,您创建一个Rectangle
,其大小为Label
的纹理大小并将其放置在某处,然后移动Label
以对齐它。它们的尺寸不同。
取消注释最后一个注释行以查看差异。
class MyClass(Widget):
...
def _on_keyboard_down(self, keyboard, keycode, text, modifiers):
with self.canvas:
lbl_staticText = Label(font_size=12)
lbl_staticText.text = 'This is some nice random text\nwith linebreak'
lbl_staticText.texture_update()
textSize = lbl_staticText.texture_size
Color(1, 0, 0, 1)
Rectangle(
pos=(100+textSize[0]/2.0, 100),
size=(textSize[0], textSize[1])
)
lbl_staticText.pos = (100+textSize[0]/2.0, 300)
print(lbl_staticText.size, textSize, lbl_staticText.size == textSize)
#lbl_staticText.size=(textSize[0], textSize[1]) # this!
Color(0, 1, 0, 1)
Rectangle(
pos=lbl_staticText.pos,
size=lbl_staticText.size
)
runTouchApp(MyClass())