Как я могу получить доступ к цвету холста через python

#python #kivy

#python #kivy

Вопрос:

Я хочу изменить цвет фонового экрана для разных случаев. Как я могу получить доступ к цвету холста через python…

Спасибо, Джулиус

Я пробовал это с помощью этого:

         with self.canvas:
            if time == times_list[6 or 7 or 8 or 9 or 10 or 11 or 12]:
                Color(rgb=utils.get_color_from_hex("#d18154ff"))
            if time == times_list[13 or 14 or 15 or 16 or 17]:
                Color(rgb=utils.get_color_from_hex("#00b6fffff"))
            if time == times_list[18 or 19 or 20 or 21]:
                Color(rgb=utils.get_color_from_hex("#b46e46ff"))
            if time == times_list[22 or 23 or 1 or 2 or 3 or 4 or 5 or 6]:
                Color(rgb=utils.get_color_from_hex("#000000a8"))

  
 <DuesseldorfWindow>:
    name: "DueW"
    canvas.before:
        Color:
            rgb : utils.get_color_from_hex("#00b6fffff")
        Rectangle:
            pos: self.pos
            size: self.size
  

Ответ №1:

У холста нет цвета, скорее это список инструкций, которые нужно запускать одну за другой, чтобы нарисовать ваше приложение. Инструкция Color устанавливает внутреннюю контекстную переменную, чтобы сказать, что если что-то нарисовано, то оно примет этот цвет.

Имея это в виду, ваша верхняя часть кода, вероятно, просто добавляет инструкции по цвету к холсту, которые ничего не делают, поскольку они появляются после всего остального, что нарисовано. Вместо этого вам нужно изменить значение rgb инструкции Color во втором фрагменте кода.

Я предлагаю добавить colour = ListProperty(get_color_from_hex("x00b6ffff")) объявление в ваш класс DusseldorfWindow, а затем записать rgb: root.colour в kv. Затем позже, когда вы захотите изменить цвет, который вы пишете self.colour = ... , чтобы изменить цвет, который уже используется, вместо добавления нового.

Комментарии:

1. Спасибо за ваш ответ, но я все еще получаю сообщение об ошибке: … 11: canvas.before: 12: Color: >> 13: rgb: root.color 14: Rectangle: 15: pos: self.pos … Ошибка атрибута: объект ‘DuesseldorfWindow’ не имеет атрибута ‘color’