wxPython: SplitterWindow и SetMaxSize для одного подокна - PullRequest
2 голосов
/ 27 сентября 2011

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

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

  1. Когда я изменяю размер (увеличиваю), весь кадр (я пытаюсь адаптироватьздесь используется терминология wxPython; обычно я бы сказал: изменить размер окна), я надеюсь, что после достижения максимального размера окна 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()

Изображение говорит тысячу слов: enter image description here Синяя область является частью разделителя, но не заполнена окном A.

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

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

1 Ответ

4 голосов
/ 27 сентября 2011

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

SetSashGravity(0.5)

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

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

...