PyGTK: упаковка виджетов перед вкладками в gtk.Notebook - PullRequest
1 голос
/ 06 февраля 2010

По сути, я хочу поместить несколько кнопок перед вкладками в gtk.Notebook. Я попытался создать свой собственный виджет типа блокнота, и он работал хорошо, но потребовалось бы гораздо больше работы, чтобы сделать его настолько гибким, насколько мне хотелось бы, а также не таким эффективным.

Вот макет того, чего я пытаюсь достичь: http://imagebin.ca/view/84SC0d.html

Любые идеи будут высоко оценены, спасибо.

Бен.

Ответы [ 3 ]

3 голосов
/ 25 марта 2010

Возможно, вам будет интересно узнать, что эта функциональность была добавлена ​​в GTK 2.20, см. «Изменения в GtkNotebook» в следующем объявлении: http://mail.gnome.org/archives/gtk-devel-list/2010-March/msg00132.html

0 голосов
/ 06 февраля 2010

Я не думаю, что есть способ сделать это без создания собственного виджета блокнота. Есть пара хаков. Один был размещен AndiDog. Другой способ - полностью скрыть вкладки (notebook.set_show_tabs(False)) и создать панель инструментов с кнопками над виджетом, с кнопками слева, плюс по одной кнопке для каждой вкладки в блокноте, которая переключается на эту страницу.

Вместо создания собственного виджета типа блокнота с нуля, вы можете наследовать от gtk.Notebook, переопределяя некоторые методы, такие как expose_event, size_request и size_allocate, чтобы иметь дело с двумя типами контейнерные дочерние элементы: страницы и кнопки. Я не знаю, как это сделать в PyGTK, только в C.

Вы также можете подумать, действительно ли кнопки в области вкладок - это то, что вам нужно. Что если пользователь изменит размер вашего ноутбука настолько мал, что некоторые вкладки исчезнут? Куда делятся стрелки предыдущей вкладки / следующей вкладки? Что происходит с кнопками?

0 голосов
/ 06 февраля 2010

Это взлом, но вы можете поместить свои виджеты на отдельную вкладку, а затем запретить нажатие на вкладку, зарегистрировав следующее событие переключения страницы для ноутбука:

def onTabsSwitchPage(self, notebook, page_notUsableInPython, pageNumber):
    # Don't allow to switch to the dummy tab containing widgets
    if pageNumber == <put correct tab number here>:
        notebook.stop_emission("switch-page")

Обратите внимание, что это не выглядит хорошо со всеми темами GTK, но работает ...

...