Как изменить цвет фона дерева в kivy python? - PullRequest
1 голос
/ 16 октября 2019

Мне нужна помощь в изменении цвета фона дерева в kivy.

Я работаю над платформой kivy в python, в которой будут перечислены некоторые метки.

Но что происходит при выполненииприложение, цвет фона моего приложения белый, а древовидное представление получает цвет фона от фона приложения.

Ниже приведен пример снимка экрана

enter image description here

Пример кода: Для создания древовидного представления.

list_label=TreeView(root_options=dict(text='My root label'),hide_root=False)
list_label.add_node(TreeViewLabel(text='My first item'))

Ответы [ 2 ]

2 голосов
/ 16 октября 2019

Добавьте следующее к вашему .py:

Builder.load_string('''
<TreeView>:
    canvas.before:
        Color:
            rgba: 1, 0, 0, 1
        Rectangle:
            pos: self.pos
            size: self.size

''')

Это меняет фон на красный. Вы можете заменить 1, 0, 0, 1 любым цветом, который предпочитаете.

Вы можете сделать это полностью в Python, но вам нужно будет вручную создать привязки, которые kv создает для вас автоматически:

    list_label=TreeView(root_options=dict(text='My root label'),hide_root=False)

    with list_label.canvas.before:
        Color(1, 0, 0, 1)
        self.background_rect = Rectangle()
    list_label.bind(pos=self.adjust_rect_pos)
    list_label.bind(size=self.adjust_rect_size)

def adjust_rect_size(self, treeview, new_size):
    self.background_rect.size = new_size

def adjust_rect_pos(self, treeview, new_pos):
    self.background_rect.pos = new_pos
0 голосов
/ 16 октября 2019

РЕДАКТИРОВАТЬ: Я вроде как ответил на неправильный вопрос, мое решение ниже меняет цвет четных / нечетных узлов, которые перекрывают фон. Я оставлю это здесь на случай, если это будет полезно.

Оригинальный ответ:

Есть несколько способов снять шкуру с этой кошки. Проще всего использовать свойства even_color и odd_color виджета TreeViewNode. Вот как вы могли бы использовать это в вашем случае:

list_label=TreeView(root_options=dict(text='My root label'),hide_root=False)
list_label.add_node(TreeViewLabel(text='My first item', \
even_color=[0.5,0.1,0.1,1],odd_color=[0.1,0.1,0.5,1]))

Определенно было бы больше DRY , чтобы создать собственный настраиваемый виджет, который одинаково прост:

from kivy.uix.treeview import TreeViewLabel
from kivy.uix.button import Button

class MyTreeViewLabel(Button, TreeViewLabel):
   def __init__(self, **kwargs):
      super(MyTreeViewLabel, self).__init__(**kwargs)
      self.even_color = [0.5,0.1,0.1,1]
      self.odd_color = [0.1,0.1,0.5,1]

Тогда ваш код будет просто:

list_label=TreeView(root_options=dict(text='My root label'),hide_root=False)
list_label.add_node(MyTreeViewLabel(text='My first item'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...