Как создать упаковочную таблицу в GTK # - PullRequest
1 голос
/ 14 декабря 2010

Я пытаюсь создать таблицу квадратных кнопок в GTK # со следующими свойствами:

  1. Кнопки будут добавляться и удаляться по одной за раз.
  2. Кнопки должныразмещаться как текст на странице - слева направо до тех пор, пока больше не сможет поместиться в строку, а затем перенести на следующую строку.
  3. Если в окне больше кнопок, чем уместится, должен бытьвертикальная полоса прокрутки.
  4. Таблица должна быть изменяемого размера.Изменение размера должно перекомпоновывать кнопки по мере необходимости.
  5. Кнопки должны быть фиксированного размера.

Я начал пытаться использовать таблицу с Homogenous == true.Я добавил обработчик для SizeAllocated, и в нем я проверяю, достаточно ли изменилась ширина таблицы, чтобы добавить или удалить столбец.Если это так, я удалил все кнопки, обновил NColumns и снова прикрепил кнопки в нужных местах.Казалось, это сработало, но кнопки не были фиксированного размера - они расширялись, чтобы заполнить горизонтальное пространство.

Затем я попытался отключить гомогенный и установить предпочтительные размеры для кнопок.Незначительная проблема заключается в том, что в идеале я хочу разместить растровое изображение известного размера на каждой кнопке, и я хотел бы получить верный макет независимо от того, сколько пикселей кнопка добавляет вокруг растрового изображения, но я не уверен, как это выяснить.общий размер кнопок для моих расчетов.Более серьезная проблема заключается в том, что мое приложение теперь перерисовывается непоследовательно - иногда метки кнопок смещены или не отображаются вообще.Мне интересно, если это потому, что я меняю раскладку в ответ на неправильный сигнал.

Как мне сделать это вместо этого?Является ли Table правильным контейнером для работы?Есть ли что-то, что будет делать то, что я хочу из коробки?(Возможно, что-то более похожее на представление «значок» или «миниатюра» в файловом браузере?) Как правильно управлять макетом окна в ответ на изменения размера?

Ответы [ 3 ]

2 голосов
/ 14 декабря 2010

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

Хорошей отправной точкой может быть этот урок (ссылка обновлена) .

1 голос
/ 15 декабря 2010

Чтобы сделать что-то подобное, вам нужен контейнер с пользовательским макетом. Коробка с оберткой сложна (требует страшных хаков), если она была сделана без новой вещи с высотой для ширины в GTK + 3.0, но это было сделано.

Вот несколько ссылок на прошлые усилия, которые могут оказаться полезными:

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

1 голос
/ 14 декабря 2010

Вы можете использовать GtkToolPalette, который доступен в GTK 2.20 и более поздних версиях.

...