2013-02-24 2 views
2

wxPython에서 일부 패널을 정렬하려고합니다. 레이아웃의 대략적인 표현은 다음과 같습니다. Abstract example of the layout needed.wxPython에서 패널 확장 유지하기

기본적으로 왼쪽 패널과 오른쪽 패널은 크기가 조정될 때 왼쪽 패널 (및 그 내용)의 크기가 조정되지 않으며, 오른쪽 (파란색) 패널은 필요한만큼 늘리고 늘릴 수 있지만 가로로만 확장 할 수 있습니다.

필자가 지금까지 (임의의 필러 위젯을 사용하여) 작성한 코드는 다음과 같습니다.

import wx 
import wx.lib.scrolledpanel as scrolled 

class MainWindow(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent) 

     #add position panel 
     posPnl = IdPanel(self) 
     lbl1 = wx.StaticText(posPnl, label="Position") 
     lbl2 = wx.StaticText(posPnl, label="Size") 
     sizeCtrl = wx.TextCtrl(posPnl) 

     posPnlSzr = wx.BoxSizer(wx.VERTICAL) 
     posPnlSzr.Add(lbl1, 1, wx.FIXED&wx.LEFT) 
     posPnlSzr.Add(sizeCtrl, 1, wx.LEFT&wx.FIXED) 
     posPnlSzr.Add(lbl2, 1, wx.FIXED&wx.LEFT) 

     posPnl.SetSizer(posPnlSzr) 

     posPnl2 = TimelinePanel(self) 
     lbl12 = wx.StaticText(posPnl2, label="Position") 
     lbl22 = wx.StaticText(posPnl2, label="Size") 
     sizeCtrl2 = wx.TextCtrl(posPnl2) 

     posPnlSzr2 = wx.BoxSizer(wx.VERTICAL) 
     posPnlSzr2.Add(lbl12, 1, wx.GROW) 
     posPnlSzr2.Add(sizeCtrl2, 1, wx.GROW) 
     posPnlSzr2.Add(lbl22, 1, wx.GROW) 

     posPnl2.SetSizer(posPnlSzr2) 

     mainSzr = wx.BoxSizer(wx.HORIZONTAL) 
     mainSzr.Add(posPnl, 1, wx.FIXED) 
     #mainSzr.AddSpacer(10) 
     mainSzr.Add(posPnl2, 1, wx.GROW) 

     self.SetSizerAndFit(mainSzr) 
     self.Show() 

class IdPanel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent, -1, size = (400, 200)) 
     self.SetBackgroundColour((255, 0, 255)) 

class TimelinePanel(scrolled.ScrolledPanel): 
    def __init__(self, parent): 
     scrolled.ScrolledPanel.__init__(self, parent, -1, size = (300, 200)) 
     self.SetBackgroundColour((255, 0, 0)) 


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

내 질문 :

  1. 어떻게 난 단지 오른쪽 패널이 확장 및 수평 방향으로 만 보장 선별기를 사용하여 내 질문에 코드를 따라? 현재 왼쪽 패널의 내용은 고정되어 있지만 패널 자체는 여전히 확장됩니다.
  2. 첫 번째 질문을 약간 수정하여 오른쪽 만 확장하고 두 패널을 모두 세로로 확장하려면 어떻게해야합니까?
  3. 오른쪽 패널의 x 축에 wx.lib.scrolledpanel을 사용하고 있습니다.하지만 창을 가로로 축소하여 표시하지 못하는 것 같습니다. 믹스/최대 패널 크기 등에 관한 설정이 있는지 확신 할 수 없지만, 이것이 도움이 될 수 있습니까? (여기서 0

    mainSzr.Add(posPnl, 0) 
    mainSzr.Add(posPnl2, 1) 
    

    비율은 해당 패널이 다른 모든 형제 선별기에 비례하여 크기를 조절하는 방법에 영향을

답변

6

1 : 주요 선별기에 두 개의 패널을 추가 할 때 sizer.Add에서 proportion 인수를 사용 수단은 크기를 조정하지 않음). wx.FIXEDwx.GROW 플래그는 여기에서 목표와 관련이 없습니다. 당신이 원하는 경우

http://wxpython.org/docs/api/wx.Sizer-class.html#Add

그래서 예를 들어, 모두 증가했으나 왼쪽 두 배 빠른 속도로 성장 할 수있는 권리, 당신은 사용할 수 있습니다

mainSzr.Add(posPnl, 1) 
mainSzr.Add(posPnl2, 2) 

2 : 사용하여 wx.EXPAND 수평 크기 조절기에서 무언가를 확장하여 수직 간격을 채 웁니다 (또는 수직 간격 조절/수평 간격을 위해 그 반대).

mainSzr.Add(posPnl, 0, wx.EXPAND) 
mainSzr.Add(posPnl2, 1, wx.EXPAND) 

3 : 추가 scrolledpanel 조작 할 필요 TimelinePanel의 __init__ 기능에 self.SetupScrolling(). 그런 다음 패널의 내용이 충분히 커서 스크롤 막대가 필요하면 추가됩니다.

+0

위대한 답변 - 정말 고마워요! 성장에 대한 플래그/비율에 대한 설명을 통해 wxPython에 대한 내 머리를 좀더 감싸는 데 도움이되었습니다. –

+0

나는 allie에 동의한다. 당신은이 종류의 설명을 워드 프로세서에서 찾을 수 없다. – alwbtc

관련 문제