wxPython: SplitterWindow и SetMaxSize для одного подокна

Я новичок в wxPython, поэтому я надеюсь, что нет ничего основного, что я упускаю из виду: я хочу использовать SplitterWindow, чтобы разделить содержимое моего фрейма на два подокна с изменяемым размером (A и B), но я хочу одно из окон (B) иметь набор MaxSize.

К сожалению, это создает проблему:

  1. Когда я изменяю размер (увеличиваю) весь кадр (здесь я пытаюсь адаптироваться к терминологии wxPython; обычно я бы сказал: изменить размер окна), я надеюсь, что как только будет достигнут maxSize окна B, окно A будет автоматически увеличен, чтобы заполнить все содержимое кадра. К сожалению, это не так.

  2. Как убедиться, что я не могу сдвинуть створку влево (уменьшить размер окна B)? В текущей ситуации окно B просто перемещается влево (не меняет ширину) и показывает синий фон WindowSplitter.

Вот мой код:

import wx         

class MainWindow(wx.Frame):

    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title, size=(500,300))

        # Create View
        self.loadView()

        #self.SetAutoLayout(1)
        self.GetSizer().Fit(self)
        self.Centre()
        self.Show()

    def loadView(self):        
        splitter = wx.SplitterWindow(self, wx.ID_ANY, style = wx.SP_BORDER, size=(500, 300))
        splitter.SetBackgroundColour('#0000ff')

        panelLeft = wx.Panel(splitter, size=(200,100))
        panelLeft.SetBackgroundColour('#00ff00')

        panelRight = wx.Panel(splitter, size=(200,100))
        panelRight.SetBackgroundColour('#ff0000')
        panelRight.SetMaxSize((200, -1))

        splitter.SplitVertically(panelLeft, panelRight)

        self.SetSizer(wx.BoxSizer(wx.HORIZONTAL))
        self.GetSizer().Add(splitter, 1, wx.EXPAND)


app = wx.App(False)
frame = MainWindow(None, "Test")
app.MainLoop()

Картинка говорит за тысячу слов: введите здесь описание изображенияСиняя область является частью разделителя, но не заполнена по окну А.

Любая помощь/подсказка в правильном направлении приветствуется.

Спасибо, Даниэль


person 38leinaD    schedule 26.09.2011    source источник
comment
Только что обновил пост вторым связанным вопросом, который я забыл раньше, и фактически описывает проблему при перемещении створки. (1) уже ответил Donkopotamus. Спасибо   -  person 38leinaD    schedule 27.09.2011


Ответы (1)


Я больше не работаю с wx, поэтому не могу протестировать решение. Однако я считаю, что вы ищете

SetSashGravity(0.5)

Поведение SplitterWindow по умолчанию заключается в том, что при изменении размера изменяется размер только правого или нижнего окна. И в вашем случае вы установили максимальный размер этого окна.

См. документы для SetSashGravity.

person donkopotamus    schedule 26.09.2011
comment
Привет Донкопотамус; Спасибо. На самом деле SetSashGravity(1.0) — это параметр, который мне нужен, поэтому размер окна A изменяется, как только окно B достигает своего максимального размера. - person 38leinaD; 27.09.2011