Создание блоков в kivymd

Делаю приложение на python, котрое взаимодействует в SQLite добавляя или выводя записи (значения)

Прошёл через русских, английских, индуских блогеров, но не нашёл решения или примера, как созлавать блоки со значениями. Везде статическое всё.

Допустим есть таблица с фамилией, именем, возрастом и краткой информацией. Нужно, чтобы в заранее созданый шаблон блока добавлялись значения и выводиличь на экран несколько блока


Ответы (1 шт):

Автор решения: Sergey Semkin

Как оказалось очень просто. Создаём метод, который возвращает необходимые блоки. Можно в качестве параметров принимать значения, которые необходимо вставить.

from kivy.uix.button import Button
from kivymd.uix.label import MDLabel
from kivymd.uix.gridlayout import GridLayout
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.app import MDApp

class MainApp(MDApp):
    def CreateBox(self):
        bl = MDBoxLayout(orientation='vertical', padding=10)
        bl.add_widget(MDLabel(text="Hello, World", halign="center"))
        bl.add_widget(Button(text="Hello, World", pos_hint={'center_x': 0.5, 'center_y': 0.5}))
        bl.add_widget(MDLabel(text="Hello, World", halign="center"))
        return bl


    def build(self):
        gl = GridLayout(cols=3, padding=10)
        for i in range(10):
            gl.add_widget(self.CreateBox())
        return gl

MainApp().run()

А ещё я немного пошаманил и цикл перенёс в метод, который принимает количество итераций(блоков), так же можно передавать массив данных.

from kivy.uix.button import Button
from kivymd.uix.label import MDLabel
from kivymd.uix.gridlayout import GridLayout
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.app import MDApp

class MainApp(MDApp):
    def CreateBox(self, number_blocks=3):
        big_layout = GridLayout(cols = 3, padding=10)
        for i in range(number_blocks):
            bl = MDBoxLayout(orientation='vertical', padding=10)
            text_widgets = "Hello, World" + str(i)
            bl.add_widget(MDLabel(text=text_widgets, halign="center"))
            bl.add_widget(Button(text=text_widgets, pos_hint={'center_x': 0.5, 'center_y': 0.5}))
            bl.add_widget(MDLabel(text=text_widgets, halign="center"))
            big_layout.add_widget(bl)
        return big_layout

    def build(self):
        bl = GridLayout(cols=3, padding=10)
        bl.add_widget(self.CreateBox(10))
        return bl

MainApp().run()

Фото итога последней версии

Фото итога последней версии

→ Ссылка