Лаги с Kivy Screenmanager и RecycleView - PullRequest
0 голосов
/ 23 мая 2019

Я использую Screenmanager, чтобы показать пользователю 6 разных экранов.Чтобы показать значения базы данных, я создал сетку данных с помощью RecycleView.Сетка выглядит следующим образом:

enter image description here

К сожалению, когда пользователь выбирает экран «Измерение», требуется несколько секунд, чтобы отобразить сетку данных или она показывает задержкусетки.Также, когда пользователь выбирает строку, отображение экрана позади занимает до 2 секунд.Если пользователь нажимает на разные экраны, которые также содержат много материала, графический интерфейс работает бегло.GUI работает на моем RaspberryPi 3 с сенсорным экраном.Если приложение работает, аппаратные средства Raspberry не очень заняты, поэтому это не будет проблемой аппаратного питания.

Файл kv:

<SelectableButtonGridMeasure>:
    # Draw a background to indicate selection
    canvas.before:
        Color:
            rgba: (0.19, 0.35, 0.45, 1) if self.selected else (0, 0, 0, 1)
        Rectangle:
            pos: self.pos
            size: self.size
    background_normal: ''
    background_down: 'icons/bkgrd-down-color.png'
    background_color: 0.25, 0.24, 0.33, 70
    on_press: app.root.ids.scr_mngr.current = 'screenmeasuringtask'


Wsrmescreenmeasure:

<Wsrmescreenmeasure>:
    id: wsrmescreen_measure_kv
    grid_measuring_task: grid_kvmeasuring_task

    padding: 30
    spacing: 10

    viewclass: 'SelectableButtonGridMeasure'
    SelectableRecycleGridLayoutMeasure:
        id: grid_kvmeasuring_task
        default_size: None, dp(35)
        default_size_hint: 1, None
        size_hint_y: None
        height: self.minimum_height
        orientation: 'vertical'
        multiselect: False
        touch_multiselect: False
        cols: 5
        markup: True

Добавление данных в сетку:

    # Put data to datagrid in screenmeasure
    Wsrmescreenmeasure.data = temp_data

    # Update inserted data in data grid    
    Wsrmescreenmeasure.refresh_from_data(App.get_running_app().
            root.ids.screenmeasure_kv.grid_measuring_task.recycleview)

Создание таблицы данных:

# Datagrid measure
class Wsrmescreenmeasure(RecycleView):
    def __init__(self, **kwargs):
        super(Wsrmescreenmeasure, self).__init__(**kwargs)
        # Design datagrid for measuring tasks
        self.data = w_logic.WsrmeLogic.get_data(self)

В чем может быть причина этих лагов?Если я уменьшу содержание сетки данных (например, с 10 до 5 строк), я чувствую, что она идет немного быстрее.Я измерил время для заполнения данных и т. Д. С помощью декораторов, но я не нашел подсказки.

...