2011-11-20 139 views
2

我剛剛開始使用wxPython。我有以下代碼:防止面板在wxPython中重疊?

import wx 

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

     wx.Frame.__init__(self,parent,id,title) 
     groupPanel = wx.Panel(self) 

     st = wx.StaticText(groupPanel, -1, "Which characteristics would you like to group by?") 

     cbAge = wx.CheckBox(groupPanel, -1, "Age") 
     cbMarket = wx.CheckBox(groupPanel,-1, "Market") 

     groupSizer = wx.BoxSizer(wx.VERTICAL) 
     groupSizer.AddMany([st,cbAge, cbMarket]) 
     groupPanel.SetSizer(groupSizer) 

     summaryPanel = wx.Panel(self) 

     st2 = wx.StaticText(summaryPanel, -1, "What would you like to summarize?") 
     cbPremiums = wx.CheckBox(summaryPanel,-1, "Premiums") 
     cbClaims = wx.CheckBox(summaryPanel,-1, "Claims") 

     summarySizer = wx.BoxSizer(wx.VERTICAL) 
     summarySizer.AddMany([st2,cbPremiums,cbClaims]) 
     summaryPanel.SetSizer(summarySizer) 

     frameSizer = wx.BoxSizer(wx.VERTICAL) 
     frameSizer.Add(groupPanel,1,wx.EXPAND) 
     frameSizer.Add(summaryPanel,1,wx.EXPAND) 

     self.SetSizer(frameSizer) 

class SASApp(wx.App): 
    def __init__(self): 
     wx.App.__init__(self) 
    def OnInit(self): 
     self.frame = SASFrame(parent=None,id=-1,title="HCRFM Custom Report Generator") 
     self.frame.Show() 
     self.SetTopWindow(self.frame) 
     return True 

def main(): 
    app = SASApp() 
    app.MainLoop() 

if __name__ == '__main__': 
    main() 

當我調整窗口的大小,以便它是非常小的,它看起來像這樣:

overlap

我怎樣才能防止這種重疊?另外,我怎樣才能做到這一點,使用戶無法將窗口縮小到足以切斷水平文字?我不確定我是否應該擔心後者。

回答

1

我這樣做的方式是確定並修復防止意外隱藏小部件的最小窗口大小。我用wx.Window method

SetMinSize((x,y)) 

wx.Window有另一個alternative method

SetSizeHintsSz(self, minSize, maxSize=DefaultSize, incSize=DefaultSize) 

允許的最小和最大窗口大小和窗口大小 增量的規範。如果一對值未設置(或設置爲-1),則將使用默認值 。如果調用此函數,用戶將無法在給定邊界之外調整窗口的大小(如果它是 頂級窗口)。Sizers還將檢查最小窗口大小 ,並且如果設置爲計算佈局。

調整大小增量僅在Motif或Xt下很重要。