Создание виджета GTK с помощью Expander

Я пытаюсь создать виджет GTK, как показано на следующих изображениях.

alt text

Можно ли создать его в GTK+ под C, пробовал через GtkExpander, но не получается...

Может ли кто-нибудь помочь ....


gtk
person User7723337    schedule 30.10.2009    source источник
comment
Что в этом образе нельзя сделать с помощью GtkExpander?   -  person ptomato    schedule 30.10.2009
comment
Мне нужен взгляд... который я дал на этом изображении.   -  person User7723337    schedule 02.11.2009


Ответы (2)


Если вы хотите дублировать внешний вид, то есть два очень неэффективных решения проблемы:

  1. Напишите свой собственный движок темы GTK (см. Murrine или Clearlooks).
  2. Замените всю вашу программу виджетом GtkDrawingArea и используйте Cairo, чтобы нарисовать именно то, что вам нужно. Однако тогда вы будете предоставлены сами себе, поэтому вам придется писать все алгоритмы размещения виджетов, кнопки, расширители, меню и многое другое с нуля.

GTK на самом деле не предназначен для такого рода вещей. Весь смысл GTK заключается в том, что вы разрабатываете свой пользовательский интерфейс со стандартными виджетами, и они просто работают с любой темой, языком или технологиями специальных возможностей, которые нужны вашим пользователям. Если вы создаете свой собственный внешний вид и нет возможности его изменить, то человек с дальтонизмом или плохим зрением не сможет его использовать. Или текст будет смещен, если кто-то использует ваше приложение на другом языке. Или, по крайней мере, может быть, кому-то просто нравится черный рабочий стол с белыми буквами, и ваше приложение будет выделяться и выглядеть очень уродливо на компьютере этого пользователя. Если вам действительно нужно, чтобы это выглядело именно так, то, вероятно, GTK вам не подходит.

person ptomato    schedule 02.11.2009
comment
Большое спасибо за объяснение ... На самом деле я пытаюсь создать вид в сеансе работы с виджетом ... например, когда мы используем Expander, мы получаем одну стрелку в левом углу Label, и когда мы нажимаем на это, она будет расширяться .... поэтому я хочу заменить эту стрелку, я не хочу, чтобы эта стрелка была просто полосой (с любым цветом, который предоставляет система) ... и когда пользователь нажимает на нее, она будет расширить... надеюсь, это объясняет! - person User7723337; 03.11.2009
comment
Может быть, вы можете создать подкласс GtkExpander и нарисовать свою цветовую полосу с помощью Cairo. - person ptomato; 03.11.2009
comment
не могли бы вы привести пример! - person User7723337; 03.11.2009
comment
Нет, извините... это слишком сложно, чтобы писать здесь. Кроме того, я никогда раньше не использовал Каир напрямую, поэтому не знаю, как это сделать. Вот ссылка на соответствующий раздел руководства по GTK под названием «Написание собственных виджетов»: library.gnome.org/devel/gtk-tutorial/stable/c2182.html Обратите внимание на то, как они делают виджет GtkDial, хотя это руководство слишком старо для использования Cairo. В книге «Основы разработки GTK+» (www.gtkbook.com) есть очень хороший раздел о рисовании собственных виджетов. Если я правильно помню, в этой главе они используют Cairo. В любом случае, это очень хорошая книга для чтения. - person ptomato; 03.11.2009
comment
На самом деле, вам, вероятно, было бы лучше просто временно использовать GtkExpander и написать свой собственный виджет, чтобы заменить его позже. - person ptomato; 03.11.2009
comment
Спасибо за объяснение... я просто использую простой расширитель, а затем заменю его новым пользовательским виджетом. - person User7723337; 04.11.2009

Разобрать стрелу совсем несложно. Просто добавьте следующий код к вам $HOME/.gtkrc-2.0 (или создайте его, если он не найден):

style "pradeep" {
  GtkExpander::expander-size = 0
  GtkExpander::expander-spacing = 0
}
widget "*.GtkExpander" style "pradeep"

Это делается путем настройки внешнего вида с помощью файлов ресурсов. . Вы можете получить тот же результат программно, изменив свойства стиля GtkExpander.

Кроме того, вы можете подключить свой собственный обратный вызов к его сигналу «активировать» и переключать цвет фона виджета, когда он активен или нет. И многое другое...

Просто помните, что кому-то нравится иметь последовательный пользовательский интерфейс.

person ntd    schedule 03.11.2009
comment
Предположительно, в настоящее время это можно было бы сделать, предоставив настраиваемую тему с измененным CSS, определяющим новый класс Expander, который скрывает стрелку, и добавив этот класс стиля в StyleContext всех виджетов, которые должны быть изменены. - person underscore_d; 01.07.2016