Я создал объект Frame и хочу ограничить ширину, до которой он может расширяться. Единственное окно в кадре — это объект ScrolledWindow, который содержит все остальные дочерние элементы. У меня есть много объектов, расположенных с вертикальной ориентацией BoxSizer, поэтому объект ScrolledWindow становится довольно высоким. Часто справа есть полоса прокрутки, чтобы вы могли прокручивать вверх и вниз.
Проблема возникает, когда я пытаюсь установить максимальный размер кадра. Я использую функции scrolled_window.GetBestSize()
(или scrolled_window.GetEffectiveMinSize()
) ScrolledWindow, но они не учитывают вертикальную полосу прокрутки. В итоге у меня есть рамка, которая слишком узкая, и есть горизонтальная полоса прокрутки, которая никогда не исчезнет.
Есть ли метод, который будет компенсировать ширину вертикальной полосы прокрутки? Если нет, то как мне получить ширину полосы прокрутки, чтобы я мог вручную добавить ее к максимальному размеру моего фрейма?
Вот пример с высокой, но узкой рамой:
class TallFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, title='Tall Frame')
self.scroll = wx.ScrolledWindow(parent=self) # our scroll area where we'll put everything
scroll_sizer = wx.BoxSizer(wx.VERTICAL)
# Fill the scroll area with something...
for i in xrange(10):
textbox = wx.StaticText(self.scroll, -1, "%d) Some random text" % i, size=(400, 100))
scroll_sizer.Add(textbox, 0, wx.EXPAND)
self.scroll.SetSizer(scroll_sizer)
self.scroll.Fit()
width, height = self.scroll.GetBestSize()
self.SetMaxSize((width, -1)) # Trying to limit the width of our frame
self.scroll.SetScrollbars(1, 1, width, height) # throwing up some scrollbars
Если вы создадите этот кадр, вы увидите, что self.SetMaxSize
установлен слишком узко. Всегда будет горизонтальная полоса прокрутки, поскольку self.scroll.GetBestSize()
не учитывает ширину полосы прокрутки.