Изменение цвета всплывающего Kivy - PullRequest
0 голосов
/ 02 ноября 2019

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

def none_selected(self):
        pop = Popup(title='Error',
                    content=Label(text='Please select at least one option', multiline=True,),
                    size_hint=(None, None), size=(250, 200))
        pop.open()

1 Ответ

0 голосов
/ 02 ноября 2019

Если вы просто хотите изменить цвет фона для части Label в Popup, вы можете просто определить свой собственный подкласс Label:

class MyLabel(Label):
    pass

и в своем 'kv':

<MyLabel>:
    canvas.before:
        Color:
            rgba: 1,0,0,1
        Rectangle:
            pos: self.pos
            size: self.size

Затем, используя MyLabel вместо Label в вашем Popup, вы получите красный фон (но не для области заголовка Popup).

Если вы хотите изменить цвет фона для всего Popup, я думаю, вам нужно будет переопределить предопределенный стиль для Popup. Опять же, создайте подкласс Popup:

class MyPopup(Popup):
    bg_color = ListProperty([0,0,0,1])

bg_color станет цветом фона. Теперь переопределите стиль:

<-MyPopup>:
    _container: container
    GridLayout:
        padding: '12dp'
        cols: 1
        size_hint: None, None
        pos: root.pos
        size: root.size

        Label:
            canvas.before:
                Color:
                    rgba: root.bg_color
                Rectangle:
                    pos: self.pos
                    size: self.size
            text: root.title
            color: root.title_color
            size_hint_y: None
            height: self.texture_size[1] + dp(16)
            text_size: self.width - dp(16), None
            font_size: root.title_size
            font_name: root.title_font
            halign: root.title_align

        Widget:
            size_hint_y: None
            height: dp(4)
            canvas.before:
                Color:
                    rgba: root.bg_color
                Rectangle:
                    pos: self.pos
                    size: self.size

            canvas:
                Color:
                    rgba: root.separator_color
                Rectangle:
                    pos: self.x, self.y + root.separator_height / 2.
                    size: self.width, root.separator_height

        BoxLayout:
            canvas.before:
                Color:
                    rgba: root.bg_color
                Rectangle:
                    pos: self.pos
                    size: self.size
            id: container

Символ - в начале вышеуказанного kv указывает на то, что мы переопределяем стиль по умолчанию (большая часть вышеупомянутого kv скопирована из значения по умолчанию style.kv). Использование canvas.before устанавливает цвет фона. MyPopup теперь имеет свойство bg_color, которое можно установить на любой цвет, который вы хотите, например, чтобы установить красный фон:

def none_selected(self):
        pop = MyPopup(title='Error',
                    content=Label(text='Please select at least one option', multiline=True,),
                    size_hint=(None, None), size=(250, 200), bg_color=[1,0,0,1])
        pop.open()
...