在Kivy中访问Label的texture_size属性

时间:2016-04-09 13:22:06

标签: python python-3.x kivy

我想为Kivy的TextInput实现换行功能。我正在我的包装函数中创建一个Label并检查其纹理大小以查看该行是否需要换行。但无论文本如何,texture_size属性都会返回[0,0]。所以我整理了一些测试代码来调查:

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button

class Test(App):
    def build(self):
        def f(a):
            print(l.texture_size)
        l = Label(text="Random text")
        t = Button(on_press = f)
        print(l.texture_size)
        return t

Test().run()

texture_size[0,0]方法打印时返回build,但按钮会打印正确的值。在我的情况下,按钮不是一个选项,我想创建一个Label,获取其纹理大小并几乎删除它。也许有更好的方法来确定特定字体的文本大小(以像素为单位)?或者,如果没有,为什么不在build方法中打印正确的值?

1 个答案:

答案 0 :(得分:3)

设置bindings属性后,您必须刷新核心标签并检查其纹理大小:

text

请注意,这会访问受保护的属性,因此不保证此API在将来的版本中保持一致。

另外,我们最近将PR to add text wrapping support for long lines合并为my_label = Label() my_label.text = 'hello' my_label._label.refresh() print my_label._label.texture.size >>> (33, 18) my_label.text = 'goodbye' my_label._label.refresh() print my_label._label.texture.size >>> (57, 18) 。您可以尝试development version of Kivy并查看它是否符合您的要求!