如何在 Python 中使用 Gtk.StyleContext.remove_provider()?

Posted

技术标签:

【中文标题】如何在 Python 中使用 Gtk.StyleContext.remove_provider()?【英文标题】:How to use Gtk.StyleContext.remove_provider() in Python? 【发布时间】:2020-04-02 19:05:00 【问题描述】:

我正在尝试通过 css 样式提供程序更改 Gtkbutton 小部件的背景颜色。

我可以通过以下方式成功地将颜色更改为任何有效的 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 文档here:

remove_provider(提供者)[来源] 参数:provider (Gtk.StyleProvider) – 一个 Gtk.StyleProvider 从 self 的样式提供者列表中删除提供者。

我知道我应该使用 remove_provider 方法稍后删除我所做的更改并将背景颜色恢复为默认值。

但是我找不到样式提供者列表。在我的代码上下文中,当我需要查找样式提供程序列表时,我无法理解 self 是什么。

样式提供者列表在哪里?

【问题讨论】:

【参考方案1】:

经过进一步研究和搜索,我决定放弃 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')

【讨论】:

以上是关于如何在 Python 中使用 Gtk.StyleContext.remove_provider()?的主要内容,如果未能解决你的问题,请参考以下文章

我如何在 Python 中使用 GCP 枚举?

如何在python中使用nice命令?

如何在 Python 中使用 Selenium?

如何在Python中使用textcat?

当python使用“Python.h”调用该c++进程时,如何在python中停止一个c++进程

如何使用 Boost.Python 在 Python 中调用内置函数