окрасить только кнопку в Kivy в RecycleGridLayout - PullRequest
0 голосов
/ 20 сентября 2018

Я пытаюсь разработать программу, написанную на python, с использованием Kivy для графических элементов.

BoxLayout:
        RecycleView:
            viewclass: 'Button'
            data: [{'text': str(x)} for x in root.data_items]

            RecycleGridLayout:
                cols: 5
                cols_minimum: {0: 400, 1: 180, 2: 62, 3: 62, 4: 62}
                size_hint: 1, None
                default_size: None, dp(35)
                default_size_hint: 1, None
                height: self.minimum_height

Я использовал этот код для создания сетки кнопок.Мне нужно, чтобы определенная кнопка сетки была окрашена иначе, чем другие, только если условие выполнено.

Условие проверено в файле .py

sql_conn.execute("SELECT ...")
rows = sql_conn.fetchall()
for row in rows:
    for col in row:
        self.data_items.append(col)
    if row[2] == row[4]:

Как вы можете видетьУ меня есть запрос, который выбирает все элементы для макета сетки.Запрос получает некоторые элементы из базы данных и, в частности, QTA (общее количество) и OK (сколько продуктов было проверено).

В сетке будет указано название продуктов, затем их общее количество ипроверенные количества.Если два количества продукта совпадают, я хочу, чтобы кнопка QTA была окрашена в зеленый цвет.

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

Если я попробую что-то подобное, я, очевидно, раскрасю все кнопки

rows = sql_conn.fetchall()
for row in rows:
    for col in row:
        self.data_items.append(col)
    if row[2] == row[4]:
        Button.background_color = [0,255,0,0.3]

Может кто-нибудь мне помочь?

1 Ответ

0 голосов
/ 21 сентября 2018

RecycleView получает в качестве списка данных словарей, в этих словарях указываются свойства элементов, поэтому мы должны создать эти свойства и затем скопировать их, в вашем коде я вижу, что эти словари создают их в .kv,теперь вы должны сделать это в .py, как показано ниже:

*. py

rows = sql_conn.fetchall()
values = []
for row in rows:
    change_color = row[2] == row[4]
    for i, col in enumerate(row):
        text = str(col)
        color =  [0, 255, 0, 0.3] if i == 4 and change_color else [1, 1, 1, 1]
        d = dict(text=text, background_color=color)
        values.append(d)

self.data_items = values

*. kv

BoxLayout:
    RecycleView:
        viewclass: 'Button'
        data: root.data_items # <----

        RecycleGridLayout:
            cols: 5
            cols_minimum: {0: 400, 1: 180, 2: 62, 3: 62, 4: 62}
            size_hint: 1, None
            default_size: None, dp(35)
            default_size_hint: 1, None
            height: self.minimum_height
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...