Есть ли способ в Gtk + уложить один виджет поверх другого - не считая GtkFixed? GtkFixed не работает хорошо по двум причинам: 1) Мне нужен Z-порядок, и 2) Мне нужен один виджет, чтобы растянуть и заполнить предоставленное пространство.Укладка виджетов в Gtk +
ответ
Я не думаю, что в стандартном GTK есть надлежащий контейнер. Я бы подкласса Gtk :: Fixed ... он по-прежнему самый близкий, который вы можете получить, и если вы используете gtkmm, то подклассификация не должна быть очень сложной¹. Затем вы можете управлять размерами всех виджетов, растягивая один выбранный дочерний элемент для заполнения пробела.
Для управления осью Z вам, вероятно, понадобится управлять окнами X виджета - проверьте документацию GDK на тему Windows GDK. Я помню, что в PyGTK у каждого виджета есть свойство gtk.Widget.window, я думаю, что то же самое для gtkmm. Это предполагает, что все дочерние виджеты имеют X-окна, поэтому f.e. вам нужно будет обернуть Gtk :: Label внутри Gtk :: EventBox.
¹ http://www.gtkmm.org/docs/gtkmm-2.4/docs/tutorial/html/chapter-customwidgets.html
Спасибо. Я надеялся, что это будет предоставлено Gtk +. – c4757p
Я имел этот точный вопрос, используя Gtk :: Fixed (на самом деле gtk.Fixed - PyGTK - но я думаю, что это все под тем же), и я был в состоянии легко справиться с этим, манипулируя окном каждого виджета.
В моем случае виджеты уже являются экземплярами EventBox, и мне просто нужно было убедиться, что тот, который я перетаскивал, был сверху, потому что в противном случае он скользит под другими, что выглядело совершенно неправильно. Решение было так же просто, как вызвать «widget.window.raise_()», чтобы поднять основное окно виджета при щелчке виджета, чтобы начать перетаскивание.
Так что я в основном просто подтверждаю, что предыдущий ответ работает, но я хотел бы указать, что на самом деле это довольно легко. Похоже, вам может понадобиться создать несколько EventBoxes для хранения ваших виджетов, но после этого он должен просто работать.
Вы можете увидеть код, который я работал над в http://github.com/divegeek/BlockHead
- 1. Укладка GTK + виджеты
- 2. Листинг виджетов в окне GTK +
- 3. Изменить стиль виджетов в GTK #
- 4. Изменение размеров виджетов gtk пользователем
- 5. GTK: Бесконечный ленивый список виджетов
- 6. Настройка внешнего вида виджетов GTK
- 7. Вертикальная укладка как GTK в Java Swing?
- 8. Инициирование названных виджетов GTK в Python
- 9. Есть ли специализированный компоновщик виджетов в gtk?
- 10. Укладка Gtk с css на windows
- 11. Использование виджетов Haskell Gtk с пакетом Graphics.SOE
- 12. Создание GTK виджетов с помощью расширителя
- 13. Настройка стиля WNDCLASS для виджетов GTK
- 14. PyGTK - опрос таблицы GTK для местоположений виджетов
- 15. Удаляет ли контейнер уничтожение внутри виджетов в памяти в GTK
- 16. Укладка только продвинутых виджетов с помощью QT Creator
- 17. Как бороться с большим количеством виджетов в Haskell + GTK?
- 18. Добавление 2 виджетов в gtk с помощью python
- 19. GTK: изменение размеров виджетов, содержащихся в текстовом виде
- 20. Добавление двух разных виджетов в одном окне GTK +
- 21. Тема Gtk в GTK # (Windows)
- 22. Как очистить таблицу Gtk от всех ее виджетов
- 23. Связывание нескольких виджетов с тем же обработчиком GTK #
- 24. GTK: Использование окна Offscreen для исследования визуализированных размеров виджетов
- 25. CSS Укладка, укладка детей
- 26. GTK +/C Избегайте сохранения пространства для скрытых виджетов внутри GtkGrid
- 27. Изменение размера диалогового окна Gtk после скрытия/удаления виджетов
- 28. Перемещение виджета gtk, закрепленного в текстовом виде gtk
- 29. Как проверить тип виджетов, возвращаемых get_children()?
- 30. gtk минимальный размер
Вы просто хотите отобразить один виджет в данном месте и в одно время, заполняя пространство, или что-то более сложное? – liori
Я хочу отобразить один виджет, заполняющий все пространство, а затем еще один сверху в фиксированном месте, одновременно видимый. – c4757p
В настоящее время да, есть точно виджет, который позволяет управлять Z-порядком и выравниванием: ['GtkOverlay'] (https://developer.gnome.org/gtk3/stable/GtkOverlay.html). –