2015-12-03 2 views
0

Я работаю над графическим интерфейсом с помощью wxPython. Я создавал и тестировал все свои панели отдельно, и они, похоже, хорошо работают. Для того, чтобы проверить их, я просто бросить что-то вроде этого в конце моих файловwxPython SplitterWindow - автоматически устанавливает минимальный размер панели

class TestFrame(wx.Frame): 
    """Test frame""" 
    def __init__(self, parent): 
     super(TestFrame, self).__init__(parent, -1, "My Frame", 
       size=(-1,-1)) 
     # Setup main sizer 
     self.mainSizer = wx.BoxSizer(wx.VERTICAL) 
     panel = SomethingCoolPanel(self) 
     self.mainSizer.Add(panel, 1, wx.EXPAND) 
     self.mainSizer.SetSizeHints(self) 
     self.Center() 

class App(wx.App): 
    def OnInit(self): 
     self.frame = TestFrame(None) 
     self.frame.Show() 
     self.SetTopWindow(self.frame) 
     return True 

if __name__ == '__main__': 
    app = App() 
    app.MainLoop() 

который получается хорошо за то, что я делаю. Мне нравится, как self.mainSizer.SetSizeHints (self) прекрасно устанавливает окно и устанавливает разумный минимальный размер.

Могу ли я настроить что-то подобное в окне сплиттера? Сейчас я просто устанавливаю минимальный размер и начальную позицию вручную. Он работает в настоящий момент, но должен быть лучший способ. Кроме того, установка размера минимальной панели применяется к обеим сторонам окна сплиттера. Возможно, мне хотелось бы, чтобы мин был меньше слева, чем справа.

ответ

0

Вы можете поместить свою панель внутри сплиттера, конечно, почему бы и нет? Вопрос только в том, что будет в другой половине сплиттера, но я думаю, у вас есть представление об этом.

Чтобы установить начальное положение, запросите оптимальный размер панели и используйте ее вертикальный или горизонтальный компонент (в зависимости от ориентации разделителя), чтобы расположить створку.

Наконец, чтобы установить разные минимальные размеры для панелей, вам необходимо переопределить wxSplitterWindow::OnSashPositionChanging(), но я не уверен, что если это поддерживается с помощью wxPython.

+0

Каков наилучший способ запроса наилучшего размера панели? Кроме того, я помещал панели в окно сплиттера. Дело в том, что, когда я тестировал панель, это был self.mainSizer.SetSizeHints (self) тестового кадра, который установил хороший минимальный размер. Вызывать то же самое в панели, похоже, не помогает. Я размещаю панели в окне сплиттера, но их можно изменить, однако – Shatnerz

+0

Чтобы получить максимальный размер панели, вызовите 'GetBestSize()' на ней. Обычно вызов 'SetSizeHints()' в основном фрейме должен работать, так как сплиттер должен правильно вычислять свой собственный размер, используя наилучшие размеры его подлодок. –

+0

Спасибо. Вы действительно знаете свой материал – Shatnerz

Смежные вопросы