Отображение различных типов виджетов в Recycleview Kivy - PullRequest
0 голосов
/ 06 августа 2020

Мне было интересно, можно ли отображать разные типы виджетов в kivy recycleview, у меня он отображает текстовые поля, что здорово, но можно ли отображать изображения в том же представлении корзины, или мне нужно создать еще один повторный просмотр поверх мой существующий, это мой код и текущий моментальный снимок приложения, мое текущее понимание состоит в том, что у вас может быть только один класс представления в представлении корзины, мое - это текстовый ввод, поэтому как добавить еще один класс представления в тот же повторный просмотр.

текущий экран https://i.stack.imgur.com/u8JpE.jpg

main.kv

   SelectableReportTextbox:



    size_hint:  None,None
    text_size : self.text_size
    size_hint_y: None
    font_size: self.height*0.2
    foreground_color: [1, 1, 1, 1]
    readonly: True
    background_color: (0.1, 0.3, 0.7, 0.7)
    padding_x: [30,30]
    font_name: 'C:\kivy_venv\Graphics\GIL_____.TTF'
    border: [50,50,50,50]







  ScreenTwo:
  




    canvas.before:


            Rectangle:
                    size:self.size           #100, 100
                    pos: self.pos
                    source: "C:\kivy_venv\Graphics\Jetfire back.png"


    RecycleView:

            do_scroll: True, True
            bar_width: 6
            size_hint: (None, None)
            id: scrlv
            size: (500, 500)
            pos_hint: {'center_x': .75, 'center_y': .64}
            scroll_y: 0
            multiline:True




            ProjectRV:

                    viewclass: 'SelectableReportTextbox'        # defines the viewtype for the data items.
                    orientation: "vertical"
                    scroll_type: ['bars', 'content']
                    scroll_wheel_distance: dp(114)
                    key_size: "height"

                    padding:1, 1
                    space_x: self.size[0]/3
                    id: rv
                    pos_hint: {'center_x': 0.32, 'center_y': 0.525}
                    bar_width: dp(25)
                    bar_color: (0.7, 0.1, 0.3, 0.7)
                    bar_inactive_color: (0.1, 0.1, 0.1 , 1)
                    scroll_y : 0





                    SelectableRecycleBoxLayout:


                            data : []
                            spacing : '5'
                            default_size_hint: 1, None
                            size_hint_y: None
                            height: self.minimum_height
                            multiselect: True
                            touch_multiselect: True
                            orientation: 'vertical'




                            SelectableRecycleBoxLayout:

                                    data : []
                                    color:(0, 0.7, 0.4, 0.4)
                                    spacing : '5'
                                    default_size_hint: 1, None
                                    size_hint_y: None
                                    height: self.minimum_height
                                    multiselect: True
                                    touch_multiselect: True
                                    orientation: 'vertical'

1 Ответ

0 голосов
/ 06 августа 2020

Вы можете определить свой собственный viewclass, который отображает все, что вы хотите. Ваш viewclass должен иметь Properties, который соответствует клавишам в data RecycleView.

Вот простой пример:

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.recycleview import RecycleView


class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)

        # set up the data
        self.data = [
            {'text': 'Some Text', 'image': 'dots.png'},
            {'text': 'more text', 'image': 'tester.png'}
            ]

kv = '''
<MyViewClass@BoxLayout>:
    # define the properties that appear in the data
    text: ''
    image: ''
    
    # define how the data is displayed
    Image:
        source: root.image
    Label:
        text: root.text
RV:
    viewclass: 'MyViewClass'
    RecycleBoxLayout:
        padding: 10, 0, 10, 0
        size_hint_y: None
        height: self.minimum_height
        default_size: None, 40
        default_size_hint: 1, None
        orientation: 'vertical'
        spacing: 3
'''

class TestApp(App):
    def build(self):
        return Builder.load_string(kv)

TestApp().run()
...