Изменение размера GTK виджетов в Vbox в C - PullRequest
4 голосов
/ 26 января 2011

Ну, у меня проблема с небольшим интерфейсом, который я делаю в GTK.

У меня есть несколько виджетов в коробке, ровно три виджета, и я помещаю их в vbox с gtk_box_pack_start. Я изменил размеры этих виджетов с помощью функции gtk_widget_set_size_request, но, похоже, они не действуют, потому что виджеты расширены до полной ширины vbox, и не учитывают размер, который я зафиксировал в функции.

Часть кода, которая делает это:

enter = gtk_button_new();
gtk_button_set_image(GTK_BUTTON(enter), gtk_image_new_from_file("iconos/submit.png"));
gtk_widget_set_size_request(enter, 195, 32);

//User,pass
login->user = gtk_entry_new();
login->passwd = gtk_entry_new();
gtk_widget_set_size_request(login->user, 195, 32);
gtk_widget_set_size_request(login->passwd, 195, 32);

gtk_box_pack_start(GTK_BOX(v_box), login->user, FALSE, FALSE, 10);
gtk_box_pack_start(GTK_BOX(v_box), login->passwd, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(v_box), enter, FALSE, FALSE, 10);

gtk_container_add(GTK_CONTAINER(window), v_box);

Если я помещу эти виджеты в выравнивание, у меня нет проблем, размер будет зафиксирован правильно.

Почему это?

1 Ответ

2 голосов
/ 27 января 2011

Чего вы хотите добиться, установив размер?Как сказано в документации для gtk_widget_set_size_request(),

Обратите внимание на присущую опасность установки любого фиксированного размера - темы, переводы на другие языки, разные шрифты и действия пользователя могут изменить соответствующий размер для данноговиджет.Таким образом, в принципе невозможно жестко закодировать размер, который всегда будет правильным.

Вы можете установить размер запроса виджета, но это не то же самое, что установка размер ;мы не всегда можем получить то, что хотим, и поэтому при определенных обстоятельствах виджет не получает требуемый размер.Это один из таких случаев.

GTK разработан таким образом, что вам не нужно устанавливать фиксированные размеры для виджетов.(См. Приведенную выше цитату из документации.) Обычно есть лучший способ добиться того, чего вы хотите.

В этом случае поместите кнопку в GtkHButtonBox с gtk_container_add и упакуйте блок кнопок в ваше вертикальное поле с параметрами expand и fill, установленными на FALSE, какты делал раньше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...