不要在gtk3中使用glade来工作

问题描述 投票:1回答:4

我想加载一个glade文件并更改所有切换按钮的颜色(类“GtkToggleButton”,我想更改“按下”颜色)切换按钮是林间空间中许多子子元素之一 - 文件。这里用C-code-snipped来加载.css和.glade:

void on_minute_pressed(GtkWidget *button)
{
    GtkCssProvider *cssProvider = gtk_css_provider_new ();
    gtk_css_provider_load_from_path(cssProvider,"./test.css",NULL);
    GtkBuilder *builder = gtk_builder_new();
    gtk_builder_add_from_file (builder, "minute_dialog.glade", NULL);
    GtkWidget       *window= GTK_WIDGET(gtk_builder_get_object(builder, "MinuteWizard"));
    gtk_window_set_transient_for (window,main_window);
    gtk_style_context_add_provider(gtk_widget_get_style_context(window),cssProvider,GTK_STYLE_PROVIDER_PRIORITY_USER);
    gtk_builder_connect_signals(builder, NULL);

    gtk_widget_show(window);
    g_object_unref(builder);
}

这里是我目前使用的.css:

.button {
  padding: 30;
  background-color: shade (@bg_color, 55);
}

togglebutton entry {
  color: 900185;
}

button:active {
  background-color: #0274d9;
}

目前发生了什么:新窗口加载很好,但看起来我写入.css并不重要,它不会改变窗口元素的外观。我可以看到.css已加载,因为我收到如下警告:

Gtk-WARNING **:主题解析错误:test.css:2:13:不推荐使用单位。假设'px'。

怎么了 ?我是否需要单独将.css应用于每个子窗口小部件?

css c gtk3 glade
4个回答
3
投票

好的,我发现自己出了什么问题:

根据gtk_style_context_add_provider css的文档提供者不会继承到儿童风格的上下文。

因此,无论是需要将css应用于每个小部件,还是使用gtk_style_context_add_provider_for_screen来更改整个屏幕的css:

gtk_style_context_add_provider_for_screen(gdk_screen_get_default(), GTK_STYLE_PROVIDER(cssProvider), GTK_STYLE_PROVIDER_PRIORITY_USER);

1
投票

试试这个

.button {
  padding: 30px; /* px unit added */
  background-color: shade (@bg_color, 55);
}
    
.togglebutton .entry {
  color: #900185; /* # added */
}
    
.button:active {
  background-color: #0274d9;
}
<button class="button">aaaa</button>
<button class="button togglebutton"><span class="entry">aaaa</span></button>

1
投票

建议列表太长,无法作为评论:

  • 可能是你在~/.themes中安装了另一个版本的主题CSS吗?如果是这样,那个主题将取代/usr/share/themes的主题。
  • 从XDG开始,CSS的位置还有另一种可能性:来自dev documentation(下面的$XDG_CONFIG_HOME通常是~/.config):

此外,初始化GTK +时将读取某些文件。首先,加载文件$ XDG_CONFIG_HOME / gtk-3.0 / gtk.css(如果存在)。然后,GTK +加载XDG_DATA_HOME / themes / theme-name / gtk-VERSION / gtk.css,$ HOME / .themes / theme-name / gtk-VERSION / gtk.css,$ XDG_DATA_DIRS / themes / theme-中的第一个现有文件name / gtk-VERSION / gtk.css和DATADIR / share / themes / THEME / gtk-VERSION / gtk.css,其中THEME是当前主题的名称(参见#GtkSettings:gtk-theme-name设置),DATADIR是编译GTK +时配置的前缀(除非被GTK_DATA_PREFIX`环境变量覆盖),VERSION是GTK +版本号。如果没有找到当前版本的文件,GTK +会尝试旧版本一直回到3.0。

  • 另一种解决方案可能是将GtkCssProvider接口用于特定的小部件样式。

一个有趣的参考是Installing, Obtaining, and Making GTK Themes


0
投票

尝试在Glade中的小部件的“样式类”中添加类名:glade_screenshot_button_attr

© www.soinside.com 2019 - 2024. All rights reserved.