当前位置: 首页 > 知识库问答 >
问题:

GtkCssProvider和CSS样式的问题

须敏学
2023-03-14

我正在使用GTK3开发一个简单的程序,并尝试使用GtkCssProvider为特定的小部件(片段)设置CSS样式:

text = gtk_text_view_new();
provider = gtk_css_provider_new();
gtk_css_provider_load_from_data(provider,
                                    "textview {"
                                    "  font-family: serif;"
                                    "  font-size: 30px;"
                                    "  margin-top: 10px;"
                                    "  margin-bottom: 10px;"
                                    "  color: green;"
                                    "}",-1, NULL);
context = gtk_widget_get_style_context(text);
gtk_style_context_add_provider(context,
                                GTK_STYLE_PROVIDER(provider),
                                GTK_STYLE_PROVIDER_PRIORITY_USER);

字体属性设置正确,但边距和颜色不。我没有任何CSS解析错误。如果我使用g_object_set()函数来设置(例如)边距,那么一切工作都很好:

g_object_set(text, "margin-top", 10, NULL);
g_object_set(text, "margin-bottom", 10, NULL);

有什么想法,怎么了?CSS的东西?也许有更好的方法来使用GtkTextView属性(文本和小部件颜色)?我也尝试了GtkInspector工具和直接的CSS编辑,但这对于边距和颜色也不起作用。

共有1个答案

凌翔宇
2023-03-14

显示问题的最小可编译示例(查看边距,取消对57-60行的注释)。用gcc 7.5.0编译。

#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <stdbool.h>

static GtkWidget *window;
static GtkWidget* layoutGrid;
static GtkWidget* textLog;
static GtkTextBuffer* bufferLog;
static GtkCssProvider* cssProviderLog;
static GtkStyleContext* context;

gboolean wndDeleteEventHandler(__attribute__((unused)) GtkWidget* widget,
                                __attribute__((unused)) GdkEvent* event,
                                __attribute__((unused)) gpointer user_data)
{
    gtk_main_quit();
    
    return TRUE;
}

int main(int argc, char** argv)
{
    gtk_init(&argc , &argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    g_signal_connect(window, "delete-event", G_CALLBACK(wndDeleteEventHandler), NULL);

    layoutGrid = gtk_grid_new();
    gtk_widget_set_hexpand(layoutGrid, TRUE);
    gtk_widget_set_vexpand(layoutGrid, TRUE);
    gtk_container_add(GTK_CONTAINER(window), layoutGrid);

    textLog = gtk_text_view_new();
    gtk_widget_set_name(textLog, "textlog");
    bufferLog = gtk_text_view_get_buffer(GTK_TEXT_VIEW (textLog));
    cssProviderLog = gtk_css_provider_new();
    gtk_css_provider_load_from_data(cssProviderLog,
                                    "textview {"
                                    "font-family: serif;"
                                    "font-size: 30px;"
                                    "margin-top: 10px;"
                                    "margin-bottom: 10px;"
                                    "color: green;"
                                    "}",-1, NULL);
    context = gtk_widget_get_style_context(textLog);
    gtk_style_context_add_provider(context,
                                GTK_STYLE_PROVIDER(cssProviderLog),
                                GTK_STYLE_PROVIDER_PRIORITY_USER);
    gtk_text_buffer_set_text(bufferLog, "Hello, this is some text in log buffer", -1);
    gtk_widget_set_hexpand(textLog, TRUE);
    gtk_widget_set_vexpand(textLog, TRUE);
    // g_object_set(textLog, "margin-left", 20, NULL);
    // g_object_set(textLog, "margin-top", 20, NULL);
    // g_object_set(textLog, "margin-bottom", 20, NULL);
    // g_object_set(textLog, "margin-right", 20, NULL);
    gtk_grid_attach(GTK_GRID(layoutGrid), textLog, 0, 0, 1, 1);

    gtk_widget_show_all(window);
    gtk_main();
}

生成文件

C = gcc
CFLAGS = -c

OBJ = \
    screen.o

.c.o:
    $(C) $(CFLAGS) $(INCLUDES) `pkg-config --cflags --libs gtk+-3.0` $<

all: $(OBJ)
    $(C) -o test $(OBJ) `pkg-config --cflags --libs gtk+-3.0`
 类似资料:
  • 请问文字两边的这个样式 怎么写出来,还是说用图片 感觉用图片还要定位去控制

  • Epoch 图表使用 css 设置填充颜色、笔画等。默认情况下,图表使用 D3分类颜色。您可以轻松地覆盖这些默认颜色或创建您自己的自定义类别。 主题 Epoch 以主题的形式安排类似于图表的样式。主题可以通过特殊的类名添加到任何HTML容器中。目前,Epoch船有两个内置主题: epoch-theme-default-基于d3分类颜色的默认主题 epoch-theme-dark-黑色背景下使用的主

  • 主要内容:GWT CSS样式 介绍,GWT CSS样式 常用API,GWT CSS样式 主要和次要风格,GWT CSS样式 关联CSS文件,GWT CSS样式 示例GWT CSS样式 介绍 GWT 小部件依赖于级联样式表 (CSS) 进行视觉样式设置。默认情况下,每个组件的类名是gwt-<classname>。 例如, Button 小部件具有gwt-Button的默认样式,类似的方式 TextBox widest 具有gwt-TextBox的默认样式。 为了给所有按钮和文本框更大的字体,您可以

  • 我正在尝试在GeoServer中使用CSS样式设置点层的样式。 Geoserver版本2.11.3构建自docker容器(从以下repo派生:https://github.com/oscarfonts/docker-geoserver) 我更新的docker文件(将geoserver版本更新到2.11.3,并增加了一些更多的字体): 产生错误的样式定义: 主要错误似乎是:java.lang.NoC

  • 我有一个JAVA EE应用程序。部署在Tomcat 7中,其中我有这个JSP,我想将样式应用于页脚以使文本居中,所以我在JSP中定义了要应用于页眉DIV的样式 但是页脚不适用该样式,我看到所有浏览器的文本都向左对齐。L IE、chrome和Firefox

  • 本文向大家介绍Bosun 嵌入式模板和CSS样式,包括了Bosun 嵌入式模板和CSS样式的使用技巧和注意事项,需要的朋友参考一下 示例 您可以将另一个模板主体嵌入到模板中,{{template "mysharedtemplate" .}}以重复使用共享的组件。这是一个创建标题模板的示例,该模板可以在所有其他模板主体的顶部重复使用。它还使用CSS来对输出进行样式化,以便于阅读。请注意,所有<sty