如何在 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()?的主要内容,如果未能解决你的问题,请参考以下文章