Как я могу использовать RecycleView на экране - PullRequest
0 голосов
/ 11 мая 2019

Я могу попытаться выучить kivy, и у меня есть мини-проект.В моем проекте много экранов.У меня была проблема с выполнением проекта.Я хочу показать 20 вопросов и для каждого вопроса один флажок, но если на экране уместится 20 вопросов, изображение не будет хорошим.Я хочу использовать прокрутку для этой проблемы, если я могу прокрутить экран вниз, моя проблема будет решена, но я не могу использовать RecycleView на экране, как я могу использовать RecycleView на экране?

Я смотрел на другие подобные проблемы в Интернетено либо я не понял, либо мне было не то.

Редактировать: изображение, сгенерированное кодом в моем файле .kv, это то, что я хочу.Мне просто нужно добавить функцию прокрутки вниз, как я могу это сделать?

Мой файл .kv

<SkillChose>:
    name:"skill"
    GridLayout:
        cols:1
        GridLayout:
            cols:2
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:

1 Ответ

0 голосов
/ 12 мая 2019
  1. Вы можете использовать ScrollView для прокрутки вашего GridLayout вверх и вниз.Вот пример:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.label import Label

KV = """
BoxLayout

    ScrollView:
        # uncomment the line below if items text looks a bit blurry
        #on_pos: self.pos = tuple(map(int, args[1]))

        size: self.size

        GridLayout:
            id: grid
            size_hint_y: None
            row_default_height: '50sp'
            height: self.minimum_height
            cols:2

            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"try"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
            Label:
                text:"pls"
            CheckBox:
            Label:
                text:"more"
            CheckBox:
"""
class MyApp(App):
    def build(self):
        self.root = Builder.load_string(KV)

MyApp().run()
Вы можете использовать RecycleView на экранах.Я написал для вас простой пример:
from kivy.app import App
from kivy.lang import Builder

from kivy.uix.recycleview import RecycleView

KV = """
ScreenManager
    Screen
        name: 's1'
        BoxLayout
            Button
                text: 'go to screen 2'
                on_press: root.current = 's2'
            RV

    Screen
        name: 's2'
        BoxLayout
            Button
                text: 'go to screen 1'
                on_press: root.current = 's1'
            RV


<RV>
    viewclass: 'Label'
    RecycleBoxLayout
        default_size: None, dp(56)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
"""

class RV(RecycleView):
    def __init__(self, **kwargs):
        super(RV, self).__init__(**kwargs)
        self.data = [{'text': str(x)} for x in range(100)]

class MyApp(App):
    def build(self):
        self.root = Builder.load_string(KV)

MyApp().run()

Но работать с RecycleView немного сложнее, чем с представлением с прокруткой.

И, пожалуйста, обратите внимание - есть одно неожиданноефункция при использовании RecycleView с флажками - некорректное отображение выбранных флажков при прокрутке.Это исправлено tshirtman: здесь и здесь

...