Использование GtkFixed: внутренний виджет игнорирует координаты - PullRequest
2 голосов
/ 26 марта 2019

Я пытаюсь переместить GtkFrame, внутри GtkFixed, влево.Исходный код ниже

frm_2 = gtk_frame_new (NULL);
gtk_widget_show (frm_2);
gtk_fixed_put (GTK_FIXED (fixed1), frm_2, 160, 16);
gtk_widget_set_size_request (frm_2, 1105, 264);
gtk_frame_set_shadow_type (GTK_FRAME (frm_2), GTK_SHADOW_ETCHED_OUT);

fixed3 = gtk_fixed_new ();
gtk_widget_show (fixed3);
gtk_container_add (GTK_CONTAINER (frm_2), fixed3 );

frm_1_frm_2 = gtk_frame_new (NULL);
gtk_widget_show (frm_1_frm_2);
gtk_fixed_put (GTK_FIXED (fixed3), frm_1_frm_2, 6, 8); // <-- THIS
gtk_widget_set_size_request (frm_1_frm_2, 250, 224);
gtk_frame_set_shadow_type (GTK_FRAME (frm_1_frm_2), GTK_SHADOW_ETCHED_OUT);

Я пробовал с

gtk_fixed_put (GTK_FIXED (fixed3), frm_1_frm_2, 0, 8);

И с

gtk_fixed_put (GTK_FIXED (fixed3), frm_1_frm_2, 50, 8);

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

Полная иерархия виджетов:

GtkWindow( GTK_WINDOW_TOPLEVEL )
|
+-GtkFixed fixed1
| |
| +-GtkFrame
|
+-GtkFrame frm_2
    |
    +-GtkFixed fixed3
      |
      +-GtkFrame frm_1_frm_2
      |
      +-GtkFrame another frame
...

Версия Gtk:

lslibgtk *
libgtk-x11-2.0.so.0.2400.23

  1. Что я делаю не так?

  2. Какмне решить?

Извините за мой плохой английский.

1 Ответ

1 голос
/ 02 апреля 2019

# 1 Пожалуйста, предоставьте минимальный рабочий пример того, что вы наблюдаете.К счастью из того, что вы подняли, мне не пришлось проделывать большую работу, чтобы вставить его в существующую кодовую базу и получить его для сборки, но есть вероятность, что проблема находится за пределами кода, который вы опубликовали (даже еслитолько косвенно).Я опробовал ваш код, и внутренний виджет отображается в соответствии с заданием (разные позиции для разных значений x).

# 2 Никогда не использовал GtkFixed.Я знаю, что есть много догматических руководств по кодированию (лично мне нравится goto), но у этого есть свои достоинства.Gtk находится над дисплеем диспетчера, который, в свою очередь, будет располагаться над бэкэндом, таким как кварц x11 или Wayland.Gtk не говорит, куда должны идти виджеты.Это не его работа.Он может только посоветовать.

У вас вполне может возникнуть ситуация, когда Гтк заходит в офис, говорит: «Я хочу и то, и другое, и положу это на свой стол к концу рабочего дня».

Gdk говорит: "Конечно, босс".

Когда он выходит из комнаты, x11 говорит: "Разве он не знает, что это нарушит доступность?"или "что хорошего в кнопке закрытия, которая даже не находится в пределах экрана?"или даже «Компьютер говорит нет».

«Просто положите его там, где вы считаете лучшим, и я найду способ запутать отчет».

«obfa-what?»

"точно"

В итоге ваш менеджер дисплеев примет много решений, которые вы не можете (в основном потому, что не должны) контролировать.Это может быть, почему ваш виджет не там, где вы хотите.Старайтесь не полагаться на GtkFixed, вместо этого используйте другие контейнеры и добавьте отступы и интервалы, если считаете необходимым получить аналогичный эффект.Только не используйте GtkFixed.Это злоРазработчики пользовательского интерфейса будут отправлять вам ненавистные письма на долгие годыНе используйте GtkFixed.Серьезно, не делай этого.Жизнь - это прекрасная вещь, которую нужно ценить и беречь во всей ее красе.Не используйте GtkFixed.Ты проведешь месяцы с хвостом между ног, как когда моя собака поправилась.Не используйте GtkFixed.

...