gpt4 book ai didi

c - gtk_grid_set_row_spacing 与 gtk_table_set_row_spacings

转载 作者:行者123 更新时间:2023-11-30 15:39:35 24 4
gpt4 key购买 nike

通读 GTK Book ,在确保学习以 GTK3 为中心的技能时,有很多事情需要清理。一是表格与网格。我的问题是关于这两个小部件的 set_spacing 函数。

GTK docs假设 gtk_table_set_row_spacings() 的第二个参数以像素为单位。然而,docs对于 gtk_grid_set_row_spacing() ,不要给出第二个参数的度量单位。设置两个小部件的列间距也是如此。

这令人担忧的唯一原因(除了明确的更好?)是您必须使用非常不同的数字来在表格和网格之间创建相同的美感。那么,如果网格不是按像素间隔的,那么它们的间隔是多少?

编辑:

这是我输入的教程代码。

#include <gtk/gtk.h>

int main(int argc, char *argv[])
{
GtkWidget *window, *table, *label, *label2, *name;

gtk_init(&argc, &argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "Tables");
gtk_container_set_border_width(GTK_CONTAINER(window), 10);

g_signal_connect(window, "destroy", gtk_main_quit, NULL);

//table = gtk_table_new(2, 2, TRUE);
table = gtk_grid_new();

label = gtk_label_new("Enter the following information...");
label2 = gtk_label_new("Name: ");

name = gtk_entry_new();

//gtk_table_attach(GTK_TABLE(table), label, 0, 2, 0, 1, GTK_EXPAND, GTK_SHRINK, 0, 0);
//gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, GTK_EXPAND, GTK_SHRINK, 0, 0);
//gtk_table_attach(GTK_TABLE(table), name, 1, 2, 1, 2, GTK_EXPAND, GTK_SHRINK, 0, 0);

gtk_grid_attach(GTK_GRID(table), label, 0, 0, 2, 1);
gtk_grid_attach(GTK_GRID(table), label2, 0, 1, 1, 1);
gtk_grid_attach(GTK_GRID(table), name, 1, 1, 1, 1);

//gtk_table_set_row_spacings(GTK_TABLE(table), 5);
//gtk_table_set_col_spacings(GTK_TABLE(table), 5);

gtk_grid_set_column_spacing(GTK_GRID(table), 5);
gtk_grid_set_row_spacing(GTK_GRID(table), 5);

gtk_container_add(GTK_CONTAINER(window), table);
gtk_widget_show_all(window);

gtk_main();
return 0;
}

两者产生截然不同的结果。我唯一的猜测是,如果网格和表格都是像素填充的,那么我在转换此代码时误解了网格和表格的布局方式。

作为引用,这是使用以下 Makefile 编译的:

BINS         = $(basename $(wildcard *.c))
CC = gcc
CFLAGS += -Wall -Wextra -std=c11
GTK_DFLAGS = -DGTK_DISABLE_SINGLE_INCLUDES -DGDK_DISABLE_DEPRECATED -DGSEAL_ENABLE
GTK_CFLAGS := $(shell pkg-config --cflags gtk+-3.0)
GTK_LDFLAGS := $(shell pkg-config --libs gtk+-3.0)

all:
$(MAKE) $(BINS)

%: %.c
$(CC) $(CFLAGS) $(GTK_DFLAGS) $(GTK_CFLAGS) $(GTK_LDFLAGS) -o $@ $@.c

.PHONY: clean

clean:
rm -f $(BINS) *~

我注释掉了要编译的表版本的 $GTK_DFLAGS 的定义。

最佳答案

列和行仍然按像素间隔,但由于列是同质的,因此还添加了额外的空间。 (检查您对 gtk_table_new() 的调用 - TRUE 是否作为 homous 参数传递。)

这意味着每列的宽度和高度等于任何列的最大宽度和高度。即使没有任何行或列间距,这也会弄乱您的间距。因此,网格在 ASCII-art 中看起来像这样:

+----------------------------------+
|Enter the following information...|
+-----+----------------------------+
|Name:|[ ]|
+-----+----------------------------+

(请注意,Entry 设置为水平扩展,假设其最小大小为 ASCII-art 中的 20 个空格)

但是表格是同构的,因此每一列都采用最宽列的宽度。最宽的小部件是顶部标签,但它延伸到两列;所以条目获胜。该表变为:

+-----------------------------------------+
| Enter the following information... |
+--------------------+--------------------+
| Name: |[ ]|
+--------------------+--------------------+

(标签在单元格中居中,确实产生了非常有趣的间距。)

关于c - gtk_grid_set_row_spacing 与 gtk_table_set_row_spacings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21370535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com