不要在 gtk3 中得到 css with glade to work
Dont get css in gtk3 with glade to work
我想加载一个空地文件并更改所有切换按钮的颜色( class "GtkToggleButton" ,我想更改 "pressed" 颜色)切换按钮是空地文件中的许多子元素之一。
这里是我用来加载 .css 和 .glade:
的 C 代码片段
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;
}
当前发生的情况:新的 window 负载很好,但似乎我在 .css 中写入什么并不重要,它不会改变 [=30] 的外观=]-元素。我可以看到 .css 已加载,因为我收到如下警告:
Gtk-WARNING **: Theme parsing error: test.css:2:13: Not using units is
deprecated. Assuming 'px'.
怎么了?我需要将 .css 分别应用于每个子窗口吗?
试试这个
.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>
建议列表太长,无法作为评论:
会不会是您在 ~/.themes
中安装了另一个版本的主题 CSS?如果是这样,该主题将取代 /usr/share/themes
.
中的主题
自XDG以来,CSS的位置还有另一种可能性:来自dev documentation(下面的$XDG_CONFIG_HOME
通常是~/.config
):
In addition, certain files will be read when GTK+ is initialized.
First, the file $XDG_CONFIG_HOME/gtk-3.0/gtk.css is loaded if it
exists. Then, GTK+ loads the first existing file among
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 and
DATADIR/share/themes/THEME/gtk-VERSION/gtk.css, where THEME is the
name of the current theme (see the #GtkSettings:gtk-theme-name
setting), DATADIR is the prefix configured when GTK+ was compiled
(unless overridden by the GTK_DATA_PREFIX` environment variable), and
VERSION is the GTK+ version number. If no file is found for the
current version, GTK+ tries older versions all the way back to 3.0.
- 您的另一个解决方案可能是使用
GtkCssProvider
特定小部件样式的界面。
好的,我自己发现了问题所在:
根据 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);
尝试在 'style classes' 中为 Glade 中的小部件添加 class 名称:
glade_screenshot_button_attr
我想加载一个空地文件并更改所有切换按钮的颜色( class "GtkToggleButton" ,我想更改 "pressed" 颜色)切换按钮是空地文件中的许多子元素之一。 这里是我用来加载 .css 和 .glade:
的 C 代码片段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;
}
当前发生的情况:新的 window 负载很好,但似乎我在 .css 中写入什么并不重要,它不会改变 [=30] 的外观=]-元素。我可以看到 .css 已加载,因为我收到如下警告:
Gtk-WARNING **: Theme parsing error: test.css:2:13: Not using units is deprecated. Assuming 'px'.
怎么了?我需要将 .css 分别应用于每个子窗口吗?
试试这个
.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>
建议列表太长,无法作为评论:
会不会是您在
~/.themes
中安装了另一个版本的主题 CSS?如果是这样,该主题将取代/usr/share/themes
. 中的主题
自XDG以来,CSS的位置还有另一种可能性:来自dev documentation(下面的
$XDG_CONFIG_HOME
通常是~/.config
):
In addition, certain files will be read when GTK+ is initialized. First, the file $XDG_CONFIG_HOME/gtk-3.0/gtk.css is loaded if it exists. Then, GTK+ loads the first existing file among 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 and DATADIR/share/themes/THEME/gtk-VERSION/gtk.css, where THEME is the name of the current theme (see the #GtkSettings:gtk-theme-name setting), DATADIR is the prefix configured when GTK+ was compiled (unless overridden by the GTK_DATA_PREFIX` environment variable), and VERSION is the GTK+ version number. If no file is found for the current version, GTK+ tries older versions all the way back to 3.0.
- 您的另一个解决方案可能是使用
GtkCssProvider
特定小部件样式的界面。
好的,我自己发现了问题所在:
根据 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);
尝试在 'style classes' 中为 Glade 中的小部件添加 class 名称: glade_screenshot_button_attr