python - Gtk.CssProvider() 基于 ID 的选择器如何在 Gtk3 中工作?

标签 python css gtk gtk3 pygobject

几天来我一直在断断续续地摆弄这个问题,但似乎无法弄清楚可能是什么问题。

本质上,我正在尝试使用 CSS 样式声明在 Gtk3 中设置一些 Gtk 小部件的样式,没有什么复杂的,只是试图通过其 id/名称来定位特定元素。 Gtk.CssProvider() 的 Gtk 文档说

#widgetname { background-color: #333333; }

应该作为名称设置为“widgetname”的小部件的有效选择器,但我似乎无法让它工作。我最初以为是 CSS 没有加载,但我可以像这样定位顶级小部件:

GtkWindow { background-color: #333; }

它会将样式应用于窗口,我可以看到背景颜色已更改。我已经尝试使用名称作为几个不同类型的小部件(GtkEventBox、GtkTextView、GtkStatusBar、GtkBox)的 ID,但基于 ID 的选择器似乎不起作用。

这是我如何加载 CSS 的简短片段:

css = Gtk.CssProvider()

# css.load_from_file(file)
css.load_from_data('''

GtkWindow {
    background-color: #333;
}

GtkEventBox {
    background-color: #333;
}

#statusbarwrap, #textview_event_wrap, #box1 {
     background-color: #333;
}

''')

style_context = self.get_style_context()
style_context.add_provider(
    css,
    Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION)

这是 GtkCssProvider 的文档 https://developer.gnome.org/gtk3/3.7/GtkCssProvider.html

该页面上的示例 24(只需向下滚动一两页)显示 #ID 选择器有效,我正在为 Glade 中的小部件设置名称。

如有任何帮助,我们将不胜感激。

最佳答案

我们可以使用'gtk_widget_set_name()' 给这个小部件一个名字(ID)。

win = Gtk.Window()
win.set_name('main_window')

然后 '#main_window' 可以用作 CSS3 中的 ID 选择器:

#main_window {
  background-color: ...
}

如果你用文本编辑器打开一个glade文件,你会发现,widget的名字实际上被标记为id,像这样:

<object class="GtkWindow" id="window1">

请注意,小部件的名称不应包含特殊字符,如 *、# 或 >,它们是 CSS 语法的一部分。

关于python - Gtk.CssProvider() 基于 ID 的选择器如何在 Gtk3 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16740949/

相关文章:

c - (GLib) 如何创建和发出 GSignals?

python - 如何使用 pygtk 前进到 "new page"?

python - 当大于当前键值时,在python中设置字典值的最快方法

css - 在同一类声明中两次使用 CSS 属性

html - 图片在网页上损坏,但在其他地方测试时有效

html - 我怎样才能让其他邻居溢出中央绿色分区 block ?

python - 替换某个索引中的字符

python - 将 Flask 与 SQLAlchemy 和 Dash 一起使用

python - 使用嵌套循环创建二维数组

c++ - 如何 "disconnect"加速器、按键事件或鼠标按下事件在 GTK+ 小部件中?