python - CSS 样式未应用于 Gtk 小部件
问题描述
StackOverflow 上的另一个用户在使用 CSS 设计 Gtk 应用程序时遇到了一些问题。我找到了部分问题的解决方案,但对于一个我什么都不知道。原始帖子使用 C 代码,但以下 Python Minimal Reproducible Example 具有相同的问题:
#!/usr/bin/python3
#-*-coding: utf-8-*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
win = Gtk.Window()
win.connect("destroy", lambda _: Gtk.main_quit())
box = Gtk.VBox()
win.add(box)
button = Gtk.Button("Button")
prov = Gtk.CssProvider.new()
prov.load_from_data("""
button {
color: red;
background-color: green;
margin: 30px;
}
""".encode())
ctx = win.get_style_context()
ctx.add_provider(prov, 1000)
box.add(button)
win.show_all()
Gtk.main()
问题是,边距没有显示,字体和背景颜色也没有显示,而在这个例子中它们正确显示:
#!/usr/bin/python3
#-*-coding: utf-8-*-
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
win = Gtk.Window()
win.connect("destroy", lambda _: Gtk.main_quit())
box = Gtk.VBox()
win.add(box)
button = Gtk.Button("Button")
prov = Gtk.CssProvider.new()
prov.load_from_data("""
* {
color: red;
background-color: green;
margin: 30px;
}
""".encode())
ctx = button.get_style_context()
ctx.add_provider(prov, 1000)
box.add(button)
win.show_all()
Gtk.main()
这使我得出结论,选择器button
不知何故没有按照我的意愿行事。为什么选择器错误,哪个是选择按钮的正确选择器?
解决方案
请注意gtk_style_context_add_provider()的文档中所说的内容:
请注意,此函数添加的样式提供程序仅影响
context
所属小部件的样式。如果要影响所有小部件的样式,请使用gtk_style_context_add_provider_for_screen()。
样式仅适用于该小部件,不适用于小部件及其子项。设置 GTK 应用程序样式的首选方法是为整个应用程序创建一个样式表,然后使用gtk_style_context_add_class将样式类添加到各个小部件。
推荐阅读
- lua - 登录后什么时候可以使用 SendChatMessage?
- python - python 正则表达式查找至少包含一个字母的字母数字字符串
- java - 使用 GL_LINES 渲染的 OpenGL ES 抗锯齿
- heroku - Heroku:如何减小 .NET Core/Angular 应用程序块的大小?
- javascript - 重构我的javascript代码,我需要一种方法来防止鼠标打开时重复文本?
- swift - 我怎样才能避免这种情况下的强制取消变形?
- testing - 如何在nestjs的e2e测试中配置中间件
- bash - 如何将 sed 的结果回显到 bash 中的文件?
- ruby - 在 Visual Studio Code 上安装 scss-lint 时出错
- c# - 使用 INotifyDataErrorInfo 处理转换异常