Как подогнать панель wx под размер wx.Notebook (wxpython)

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

panel = wx.Panel(self)
self._panel = panel

# Arrange the various views in a notebook

self._topNoteBook = wx.Notebook(panel)

self._installsView = InstallsViewPane(self._topNoteBook)
self._topNoteBook.AddPage(self._installsView, "Your CM Installations")

self._H2HHViewNoteBook = wx.Notebook(self._topNoteBook)
self._topNoteBook.AddPage(self._H2HHViewNoteBook, "Legacy H2HH View")


# Do stuff to create the contents of installsView and H2HHViewNoteBook ...
# [...]

# Attempt to size the panel/topNoteBook so that
# panel doesn't clip the contained notebook
# Cause layout to happen
sizer = wx.BoxSizer()
self._sizer = sizer
sizer.Add(self._topNoteBook, 1, wx.EXPAND)
panel.SetSizerAndFit(sizer)

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

В результате дочерние панели выглядят нормально, но общий фрейм слишком мал: его нужно расширить вручную (что работает), чтобы увидеть все дочерние элементы:

введите здесь описание изображения

Помощь?


person GreenAsJade    schedule 05.01.2014    source источник
comment
Попробуйте заменить SetSizerAndFit() на SetSizer().   -  person Mike Driscoll    schedule 06.01.2014


Ответы (1)


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

Frame.SetSize((height, width))

Где высота и ширина - целые числа. Вы также можете попробовать использовать:

 something.GetBestSize()

Это вернет кортеж целых чисел, который лучше всего соответствует виджетам somethings.

Также я стараюсь не вызывать SetSizerAndFit(sizer). Обычно я вызываю SetSizer(sizer) и Layout() для всего, что я пытаюсь изменить. На самом деле я не могу вспомнить, когда в последний раз я вызывал Fit(), потому что он может испортить макеты, если у вас есть несколько панелей во фрейме.

person user3163371    schedule 06.01.2014
comment
Огромное спасибо. Я попробую это, как только смогу, и отчитаюсь. - person GreenAsJade; 07.01.2014
comment
Мне жаль, что мое объяснение проблемы не было хорошим. Подсказки, которые вы (и Майк) дали мне, предлагают обходной путь (IE не пытайтесь сделать наилучший вариант :) ), но еще не решение. Я постараюсь обновить вопрос, чтобы быть более ясным. - person GreenAsJade; 07.01.2014