RecycleView 中的 Kivy 尺码标签
Kivy sizing label inside RecycleView
我希望我的标签具有显示文本所需的高度。它位于 RecycleView 中。我认为我的代码应该在 RecycleView 之外工作。
如何使 Label 足够大,以便其内容易于阅读? 与它已经适用于 CodeInput 和 TextInput 的方式相同。
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.label import Label
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<RV>:
viewclass: 'SnippetView'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
spacing: 10
<SnippetView>:
canvas.before:
Color:
rgb: (255,0,0)
Rectangle:
pos: self.pos
size: self.size
orientation: 'vertical'
Label:
text: root.heading
text_size: root.width, None
size: self.texture_size
TextInput:
text: root.dscrpt
size_hint_y: None
height: self.minimum_height
CodeInput:
text: root.code
size_hint_y: None
height: self.minimum_height
''')
class SnippetView(BoxLayout):
heading = StringProperty()
dscrpt = StringProperty()
code = StringProperty()
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
self.data = [{'heading': str(x),'dscrpt': str(x),'code': str(x)} for x in range(100)]
rv = RV()
runTouchApp(rv)
我也很感谢大家对 RecycleView 的一般评论,因为我是第一次使用它。
您必须绑定一个方法来在标签值更改时更新 SnippetView
的 height
,因为您已在 RV
的规则中修复了它。试试这个:
...
Builder.load_string('''
...
<SnippetView>:
canvas.before:
Color:
rgb: (255,0,0)
Rectangle:
pos: self.pos
size: self.size
orientation: 'vertical'
Label:
id: l
text: root.heading
text_size: root.width, None
size: self.texture_size
TextInput:
id: ti
text: root.dscrpt
size_hint_y: None
height: self.minimum_height
CodeInput:
id: ci
text: root.code
size_hint_y: None
height: self.minimum_height
''')
class SnippetView(BoxLayout):
heading = StringProperty()
dscrpt = StringProperty()
code = StringProperty()
def __init__(self, **kwargs):
super(SnippetView, self).__init__(**kwargs)
self.ids.l.bind(height=self.update)
def update(self, *args):
self.height = self.ids.l.texture_size[1] + self.ids.ti.height + self.ids.ci.height
...
如何使 Label 足够大,以便其内容易于阅读? 与它已经适用于 CodeInput 和 TextInput 的方式相同。
from kivy.base import runTouchApp
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView
from kivy.uix.label import Label
from kivy.uix.recycleboxlayout import RecycleBoxLayout
from kivy.uix.behaviors import FocusBehavior
from kivy.uix.boxlayout import BoxLayout
from kivy.lang import Builder
from kivy.properties import StringProperty
Builder.load_string('''
<RV>:
viewclass: 'SnippetView'
RecycleBoxLayout:
default_size: None, dp(56)
default_size_hint: 1, None
size_hint_y: None
height: self.minimum_height
orientation: 'vertical'
spacing: 10
<SnippetView>:
canvas.before:
Color:
rgb: (255,0,0)
Rectangle:
pos: self.pos
size: self.size
orientation: 'vertical'
Label:
text: root.heading
text_size: root.width, None
size: self.texture_size
TextInput:
text: root.dscrpt
size_hint_y: None
height: self.minimum_height
CodeInput:
text: root.code
size_hint_y: None
height: self.minimum_height
''')
class SnippetView(BoxLayout):
heading = StringProperty()
dscrpt = StringProperty()
code = StringProperty()
class RV(RecycleView):
def __init__(self, **kwargs):
super(RV, self).__init__(**kwargs)
self.data = [{'heading': str(x),'dscrpt': str(x),'code': str(x)} for x in range(100)]
rv = RV()
runTouchApp(rv)
我也很感谢大家对 RecycleView 的一般评论,因为我是第一次使用它。
您必须绑定一个方法来在标签值更改时更新 SnippetView
的 height
,因为您已在 RV
的规则中修复了它。试试这个:
...
Builder.load_string('''
...
<SnippetView>:
canvas.before:
Color:
rgb: (255,0,0)
Rectangle:
pos: self.pos
size: self.size
orientation: 'vertical'
Label:
id: l
text: root.heading
text_size: root.width, None
size: self.texture_size
TextInput:
id: ti
text: root.dscrpt
size_hint_y: None
height: self.minimum_height
CodeInput:
id: ci
text: root.code
size_hint_y: None
height: self.minimum_height
''')
class SnippetView(BoxLayout):
heading = StringProperty()
dscrpt = StringProperty()
code = StringProperty()
def __init__(self, **kwargs):
super(SnippetView, self).__init__(**kwargs)
self.ids.l.bind(height=self.update)
def update(self, *args):
self.height = self.ids.l.texture_size[1] + self.ids.ti.height + self.ids.ci.height
...