Как использовать Gtk.StyleContext.remove_provider () в Python? - PullRequest
0 голосов
/ 02 апреля 2020

Я пытаюсь изменить цвет фона виджетов Gtkbutton через css поставщиков стиля.

Я могу успешно изменить цвет на любой действительный css цвет с помощью следующего:

class Widget_Color(object):
def set_widget_background_color(widget_object, new_color):
    """
    Sets the background-color of widget_opject to new_color.
    The value of new_color must be a string representing a valid
    css color name or the HEX code of a valid css color. The string is not case sensitive
    """

    css = '* {background-color: ' + new_color + '; }'
    css = css.encode('utf-8')
    css_provider = Gtk.CssProvider()
    css_provider.load_from_data(css)
    widget_style_context = widget_object.get_style_context()
    widget_style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

Из документации GTK здесь :

remove_provider (provider) [source] Параметры: provider (Gtk.StyleProvider) - Gtk.StyleProvider Удаляет поставщика из поставщиков стилей список в себе.

Я понимаю, что должен использовать метод remove_provider, чтобы впоследствии удалить сделанные мной изменения и вернуть цвет фона по умолчанию.

Однако я не могу найти поставщиков стилей список. В контексте моего кода я не могу понять, что такое «я», когда мне нужно найти список поставщиков стилей.

Где находится список поставщиков стилей?

1 Ответ

0 голосов
/ 03 апреля 2020

После дальнейших исследований и поиска я решил отказаться от подходов add_provider () и remove_provider () и вместо этого был успешным с add_class () и remove_class (), как показано в коде ниже.

class Widget_Color(object):
def set_widget_background_color(widget_object, new_color):
    """
    Sets the background-color of widget_opject to new_color.
    The value of new_color must be a string representing a valid
    css color name or the HEX code of a valid css color. The string is not case sensitive
    """

    css = '.custom {background-color: ' + new_color + '; }'
    css = css.encode('utf-8')
    css_provider = Gtk.CssProvider()
    css_provider.load_from_data(css)
    widget_style_context = widget_object.get_style_context()
    widget_style_context.add_provider(css_provider, Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)
    widget_style_context.add_class('custom')

def set_default_widget_style(widget_object):
    widget_style_context = widget_object.get_style_context()
    widget_style_context.remove_class('custom')
...