Вот минимальный воспроизводимый пример:
Пока у нас не будет только 1000 ячеек, таблица будет создана за 2 или 3 секунды.
Если вместо 1000 я пишу 10.000 в for l oop, моему p c понадобится около 50 секунд, чтобы создать таблицу, состоящую из 10.000 ячеек .. это недопустимо.
temp.py:
from kivy.uix.screenmanager import Screen
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.recycleview.views import RecycleDataViewBehavior
from kivy.properties import BooleanProperty
from kivy.properties import ListProperty
class Sfondo_tabella(RecycleDataViewBehavior, Label):
''' Add selection support to the Button '''
index = None
selected = BooleanProperty(False)
selectable = BooleanProperty(False)
class Screen_1(Screen):
pass
class Screen_2(Screen):
data_items = ListProperty([])
def on_pre_enter(self, *args):
for x in range(1000):
self.data_items.append(x)
class TempApp(App):
pass
if __name__ == '__main__':
TempApp().run()
temp.kv:
ScreenManager:
id: screen_manager
name: "screen_manager"
Screen_1:
id: screen_1
name: "Screen_1"
manager: screen_manager
Screen_2:
id: screen_2
name: "Screen_2"
manager: screen_manager
<Sfondo_tabella>:
# Draw a background to indicate selection
color: 0,0,0,1
font_size: self.height * 0.5
text_size: self.width, None
valign: 'top'
halign: 'center'
canvas.before:
Color:
rgba: (1, 1, 1, 1)
Rectangle:
pos: self.pos
size: self.size
canvas:
Color:
rgba:0,0,0,1
Line:
width:0.5
rectangle:(self.x,self.y,self.width,self.height)
<Screen_1>:
Button:
text: "Create table"
on_press:
root.manager.transition.direction = 'up'
root.manager.current = 'Screen_2'
<Screen_2>:
BoxLayout:
RecycleView:
viewclass: 'Sfondo_tabella'
data: [{'text': str(x)} for x in root.data_items]
RecycleGridLayout:
cols: 10
size_hint: 1, None
default_size: None, dp(20)
default_size_hint: 1, None
height: self.minimum_height
width: self.minimum_width