2013-09-11 3 views
0

В приложении, использующем wxPython, я использую wx.aui.AuiManager для компоновки основного фрейма. Для определенного события, вызванного пользователем, в кадре должны появиться две панели. Я могу добавить их так, чтобы они отображались в нужном месте (справа) в кадре, но я боролся с размером каждой панели. Если self._mgr = wx.aui.AuiManager(), я просто используюНастройка размера с помощью wx.aui.AuiManager's AddPane

self._mgr.AddPane(mypanel1, wx.aui.AuiPaneInfo(). 
         Name("MyPanel1"). 
         Caption("MyPanel1"). 
         MinSize(MyPanel1.GetBestSize()). 
         BestSize(MyPanel1.GetBestSize()). 
         Right().Layer(1).Position(0).CloseButton(True). 
         MaximizeButton(False)) 

self._mgr.AddPane(mypanel2, wx.aui.AuiPaneInfo(). 
         Name("MyPanel2"). 
         Caption("MyPanel2"). 
         MinSize(MyPanel2.GetBestSize()). 
         BestSize(MyPanel2.GetBestSize()). 
         Right().Layer(1).Position(1).CloseButton(True). 
         MaximizeButton(False)) 

self._mgr.Update() 

Проблема заключается в том, что при запуске программного обеспечения и открытие этих двух панелей (они всплывают в то же время), высота каждой панели height_frame * 0,5, но я хочу их высоту, чтобы сказать height_panel1 = 0.3 * height_frame, а height_panel2 = 0.7 * height_frame.

См. Пример ниже. Верхнее изображение - это то, что я заканчиваю, панель 1 и панель 2 имеют одинаковую высоту (половина доступной высоты в кадре). Самое маленькое - это то, что я хочу, где каждая панель имеет некоторое соотношение между собой.

+---------------------------------+  
    |     +-----------+| ^F 
    | MAIN FRAME  | panel1 || | r 
    |     |   || | a 
    |     |   || | m 
    |     |   || | e 
    |     +-----------+| |  
    |     | panel2 || | h 
    |     |   || | e 
    |     |   || | i 
    |     |   || | g 
    |     +-----------+| v h 
    +---------------------------------+  t 


    +---------------------------------+ 
    |     +-----------+| 
    | MAIN FRAME  | panel1 || 
    |     |   || 
    |     +-----------+| 
    |     | panel2 || 
    |     |   || 
    |     |   || 
    |     |   || 
    |     |   || 
    |     |   || 
    |     +-----------+| 
    +---------------------------------+ 

Попытки, которые я сделал, чтобы решить эту проблему, чтобы играть с параметрами MinSize и BestSize в AddPane-вызова (т.е. BestSize(wx.Size(1000, 1000))), но результат в том, что ширина двух панелей меняется, но высота каждой панели остается одинаковой (половина высоты исходного кадра)!

Обратите внимание, что это соотношение между панелями 1 и панелью 2 (30/70) будет одинаковым, даже если масштабирование основного основного кадра, но пользователь также должен иметь возможность масштабировать их, перетаскивая панели «как обычно» «(это то, что я должен сделать прямо сейчас, чтобы получить от 50/50 до 30/70 ... но эта функция, конечно, должна быть доступна).

Есть ли какие-либо предложения/решения по устранению этой проблемы? Заранее спасибо!

ответ

0

Я решил эту проблему путем динамического расчета панелей минимальных и лучших размеров.

+0

Спасибо за ваш skybobbi! После многих попыток, я обнаружил, что добавление следующих строк непосредственно перед 'self.Update()' будет исправлять: 'self._mgr.GetPane (« MyPanel1 »). Dock_proportion = 10' и' self._mgr. GetPane («MyPanel1»). Dock_proportion = 25'. – pathoren

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