Как получить (бездетные) «вкладки» в приложении pygtk - PullRequest
1 голос
/ 21 сентября 2011

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

Причина в том, что у меня есть один виджет, но я хотел бы только обновить его содержимое в зависимости от того, какая вкладка выбрана.

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

Ответы [ 2 ]

2 голосов
/ 21 сентября 2011

Идея невидимого виджета работает. Но не с gtk.Invisible (это просто сбой), а с gtk.HBox() или любой другой вещью, которая кажется пустой.

self.notebook.append_page(gtk.HBox(), gtk.Label("title"))

Теперь, если я хочу отобразить вещи внутри вкладки, я могу использовать reparent, чтобы переместить виджет на текущую вкладку следующим образом.

class Tab(gtk.HBox):
    def __init__(self, child):
        self.child = child

self.notebook.append_page(Tab(myWidget), gtk.Label("title"))

def pageSelected(self, notebook, page, pagenum):
    box = notebook.get_nth_page(pagenum)
    box.child.reparent(box)
0 голосов
/ 21 сентября 2011

Вы можете иметь глобальные виджеты, по одному на вкладку, чтобы вы могли легко получить к ним доступ при выборе вкладки.

    self.notebook.append_page(self.rightBox,    gtk.Label("Orders"))

Затем подключитесь к сигналу «Переключить страницу»

    self.notebook.connect("switch-page", self.pageSelected)

и:

def pageSelected(self, notebook, page, pagenum):
    name = notebook.get_tab_label(notebook.get_nth_page(pagenum))

Теперь у вас есть «имя» с меткой текущеговыбранная страница.Просто протестируйте его (если name == "Orders" ...) для взаимодействия.

Надеюсь, это помогло!

...