2013-07-09 67 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