我想为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
方法中打印正确的值?
答案 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并查看它是否符合您的要求!