我正在使用GTK3开发简单的程序,并尝试使用GtkCssProvider为特定的小部件(片段)设置样式:
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编辑,但这在边距和颜色方面也不起作用。
发布于 2021-03-22 22:26:46
显示问题的最小可编译示例(查看页边距,取消注释行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();
}Makefile
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`发布于 2021-03-25 19:41:32
根据GtkTextview docs中的CSS节点列表,您似乎必须在边框子节点上应用边距,并将字体应用于文本子节点,因此CSS可能如下所示:
textview border.top {
margin-top: 10px;
}
textview border.bottom {
margin-bottom: 10px;
}
texview text {
font-family: serif;
font-size: 30px;
color: green;
}如果这解决了你的问题,请让我知道!
https://stackoverflow.com/questions/66746986
复制相似问题