当 Gtk 标签的宽度由 GtkSizeGroup 设置时如何左对齐

Jus*_*nen 6 c gtk label alignment gtk3

我的标签应左对齐且宽度应相同。我使用 aGtkSizeGroup来实现尺寸调整(因为标签并不都有相同的父级)。不幸的是,这似乎打破了对齐:使用下面的代码,标签在中间水平对齐,即使我要求GTK_ALIGN_START. 如果我删除尺寸组,标签将按应有的方式对齐开始。

/* gcc `pkg-config --libs --cflags gtk+-3.0` label-align-test.c */
#include <gtk/gtk.h>

int main(int argc, char **argv)
{
  GtkSizeGroup *group;
  GtkWidget *window, *grid, *label1, *label2;

  gtk_init (&argc, &argv);

  window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

  grid = gtk_grid_new ();
  gtk_container_add (GTK_CONTAINER (window), grid);

  label1 = gtk_label_new ("label 1");
  gtk_widget_set_halign (label1, GTK_ALIGN_START);
  gtk_grid_attach_next_to (GTK_GRID (grid), label1,
                           NULL, GTK_POS_BOTTOM,
                           1, 1);

  label2 = gtk_label_new ("label 2 with longer text");
  gtk_widget_set_halign (label2, GTK_ALIGN_START);
  gtk_grid_attach_next_to (GTK_GRID (grid), label2,
                           label1, GTK_POS_BOTTOM,
                           1, 1);

  group = gtk_size_group_new (GTK_SIZE_GROUP_HORIZONTAL);
  gtk_size_group_add_widget (group, label1);
  gtk_size_group_add_widget (group, label2);

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

  gtk_widget_show_all (window);

  gtk_main ();

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

是我遗漏了什么还是这是一个错误?

我正在使用 GTK+ 3.13.6 进行测试。我意识到该示例不需要尺寸组,但在实际代码中,标签具有不同的父级,因此需要它。我可以通过在标签周围添加容器并将容器放入尺寸组来解决此问题:然后标签也开始正确对齐。

Ale*_*lex 8

我不知道这是否有什么不同,但值得一试:

您是否尝试使用gtk_label_set_xalign (label1, 0.0)而不是gtk_widget_set_halign (label1, GTK_ALIGN_START)


Jus*_*nen 6

这确实是一个未完成的功能:在 GTK+ 3.16 之前,最简单的解决方案仍然可以使用gtk_misc_set_alignment (GTK_MISC (label1), 0.0, 0.5);,即使它已被弃用。

正如 Alex 在另一个答案中提到的那样,gtk_label_set_xalign (label1, 0.0)这是现代 GTK+ 中的一个很好的解决方案(>= 3.16)。