2013-02-24 19 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,但我似乎無法水平縮小窗口以使其顯示。我不確定是否有關於混合/最大面板尺寸的設置等,這可能會有所幫助?

回答

6

1:

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

比例會影響面板的比例如何調整其大小到所有其他同級施膠劑(其中0:添加你的兩個面板時的主分級機中使用的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:添加self.SetupScrolling()到TimelinePanel的__init__功能,對於scrolledpanel操作這是必需的。然後,當面板的內容足夠大,需要滾動條時,它將被添加。

+0

偉大的答案 - 非常感謝你!你對增長的標誌/比例的解釋幫助我把我的頭圍繞wxPython多一點。 – 2013-02-25 11:37:36

+0

我同意allie,你不能在文檔中找到這種解釋。 – alwbtc 2013-12-17 04:48:59