Eu não conheço uma boa resposta, mas tenho uma solução para você:
A ideia básica é que você precisa de um widget contêiner como o widget pai na cada página (não coloque, por exemplo, um rótulo diretamente na página), e você pode ocultar / mostrar tudo, exceto o contêiner (se você ocultar o contêiner também, a página desaparecerá).
Esta solução deve funcionar para hierarquias arbitrárias de widgets.
from gi.repository import Gtk
class NotebookWindow():
def __init__(self):
self.builder = Gtk.Builder()
self.builder.add_from_file('notebook.ui')
self.builder.get_object('window1').connect('delete-event',
Gtk.main_quit)
notebook = self.builder.get_object('notebook1')
notebook.connect("switch-page", self.on_notebook1_switch_page)
self.on_notebook1_switch_page(notebook, None,
notebook.get_current_page())
def on_notebook1_switch_page(self, widget, label, page):
for p in range(widget.get_n_pages()):
container = widget.get_nth_page(p)
if not p == page:
for c in container.get_children():
try:
c.hide_all()
except AttributeError:
c.hide()
else:
for c in container.get_children():
try:
c.show_all()
except AttributeError:
c.show()
if __name__ == '__main__':
notebookwindow = NotebookWindow()
Gtk.main()
Na minha resposta original, gravei e reinscrevi os tamanhos solicitados. Isso não funciona em geral, porque o tamanho solicitado é apenas um tamanho mínimo. Eu teria que gravar um tamanho máximo, para que isso funcionasse.