2013-07-09 66 views
0

我做了一個我想要實現的小例子,它是一個StaticBoxSizer,它具有可以設置的固定邊框寬度。以下示例顯示了幾個靜態框對象,但是,如何調整其邊框寬度/厚度?WX StaticBoxSizer/Sizer邊框寬度

其他sizer可以做同樣的工作嗎?即提供兒童周圍寬度可調的邊框?

import wx 

class mypanel(wx.Panel): 
    def __init__ (self, parent): 
     wx.Panel.__init__(self, parent, size=(-1, -1)) 

     mysizer4 = wx.BoxSizer(orient=wx.HORIZONTAL) 
     box1 = wx.StaticBox(self, size=(-1,-1), style=wx.SUNKEN_BORDER) 
     box2 = wx.StaticBox(self, size=(-1,-1), style=wx.SUNKEN_BORDER) 
     box3 = wx.StaticBox(self, size=(-1,-1), style=wx.SUNKEN_BORDER) 

     mysizer = wx.StaticBoxSizer(box1, orient=wx.HORIZONTAL) 
     mysizer2 = wx.StaticBoxSizer(box2, orient=wx.VERTICAL) 
     mysizer3 = wx.StaticBoxSizer(box3, orient=wx.HORIZONTAL) 

     mybutton = wx.Button(self, size=(-1,-1), label="hello") 
     mybutton2 = wx.Button(self, size=(-1,-1), label="hello") 
     mybutton3 = wx.Button(self, size=(-1,-1), label="hello") 

     mytext1 = wx.StaticText(self, label="hello") 
     mytext2 = wx.StaticText(self, label="bye") 

     mytext3 = wx.StaticText(self, label="hello") 
     mytext4 = wx.StaticText(self, label="bye") 

     mytext5 = wx.StaticText(self, label="hello") 
     mytext6 = wx.StaticText(self, label="bye") 

     mysizer.Add(mybutton,  flag=wx.EXPAND) 
     mysizer.Add(mytext1,  flag=wx.EXPAND) 
     mysizer.Add(mytext2,  flag=wx.EXPAND) 

     mysizer2.Add(mybutton2, flag=wx.EXPAND) 
     mysizer2.Add(mytext3, flag=wx.EXPAND) 
     mysizer2.Add(mytext4, flag=wx.EXPAND) 

     mysizer3.Add(mybutton3, flag=wx.EXPAND) 
     mysizer3.Add(mytext5, flag=wx.EXPAND) 
     mysizer3.Add(mytext6, flag=wx.EXPAND) 

     mysizer4.Add(mysizer) 
     mysizer4.Add(mysizer2) 
     mysizer4.Add(mysizer3) 
     self.SetSizer(mysizer4) 

class myframe(wx.Frame): 
    def __init__(self): 
     "Constructor. No arguments" 
     wx.Frame.__init__(self, None, size=(-1,-1)) 
     sizer = wx.BoxSizer(orient=wx.HORIZONTAL) 
     mydiag = mypanel(self) 
     sizer.Add(mydiag) 
     self.SetSizer(sizer) 

if __name__ == "__main__": 
    app = wx.App() 
    region = myframe() 
    region.Show() 
    app.MainLoop() 

回答

0

Sizer並不真正支持顯示其邊框。你碰巧找到了唯一的一個,但據我所知,該小部件的配置選項非常有限。我已經看到了wxPython附帶的Widget Inspection Tool中的一個邊框突出顯示示例。

你可以在wiki上看到它。你應該看看它的來源,弄清楚它是如何完成的。

或者,你可能會發現以下螺紋有用:

它給出了一個解決辦法,其中使用的面板與背景顏色,而不是施膠劑。

+0

提供的鏈接很有用,基本上說,要獲得邊框的效果,您實際上必須自己做,即實現EVT_PAINT事件,或者使用作爲面板樣式一部分的預定義邊框,並將其插入到大小化器中(可能有不同的顏色)。 Widget檢測工具位於頂部,即成爲其所有子組件的父級,並可以確定其子級的大小/位置。 沒有開箱即用的解決方案。 – Har