RecycleView中的大小不合适的标签

问题描述 投票:1回答:1

enter image description here我希望我的标签具有显示其文本所需的高度。它在RecycleView中。我认为我的代码应该在RecycleView之外工作。

如何使标签足够大,以便可以轻松读取其内容?与它已经适用于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的任何评论,因为我是第一次使用它。

python python-3.x kivy kivy-language
1个回答
2
投票

当标签的值发生变化时,您必须绑定一个方法来更新heightSnippetView,因为您已经在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

...
热门问题
推荐问题
最新问题