2012-06-08 22 views
1

我想嵌套一個sizer與notebookPage面板的垂直佈局sizer內的水平佈局。wxpython boxsizer問題使用wxnotebook

我從wxPython: Resizing a notebook within a notebook獲得了一些靈感,但無法使其正常工作。

相反收到此佈局

噸位限制(以噸)組成:[3000]
[X]使能對集的類別濾波器

一切都是在一個單一的線錯位面板

我Win7上,蟒蛇2.6.6運行此,WX 2.8.12.1

這裏相關代碼:

import sys 
import os 


import wx 

class MainWindow(wx.Frame): 
    def __init__(self,parent,title): 
     self.ID_LOAD=101 
     self.ID_SAVE=102 

     # based on a frame, so set up the frame 
     wx.Frame.__init__(self,parent,wx.ID_ANY, title, size=(640,480)) 

     self.CreateStatusBar() 

     self.tab = wx.Notebook(self, -1, style=(wx.NB_TOP)) 
     self.globPanel = wx.NotebookPage(self.tab, -1) 
     self.orderPanel = wx.NotebookPage(self.tab, -1) 
     self.slabsPanel = wx.NotebookPage(self.tab, -1) 
     self.tab.AddPage(self.globPanel, "Global filter") 
     self.tab.AddPage(self.orderPanel, "Orders filter") 
     self.tab.AddPage(self.slabsPanel, "Slabs filter") 

     self.toolbar = wx.ToolBar(self, wx.ID_ANY, style=wx.TB_HORIZONTAL) 
     self.toolbar.SetToolBitmapSize((20,20)) 
     load_ico = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_TOOLBAR, (20,20)) 
     self.toolbar.AddLabelTool(self.ID_LOAD, "Load", load_ico, bmpDisabled=wx.NullBitmap, shortHelp='Load', longHelp="Loads a text file to the filter editor") 
     save_ico = wx.ArtProvider.GetBitmap(wx.ART_FILE_SAVE, wx.ART_TOOLBAR, (20,20)) 
     self.toolbar.AddLabelTool(self.ID_SAVE, "Save", save_ico, bmpDisabled=wx.NullBitmap, shortHelp='Save', longHelp="Saves the contents of the filter editor") 
     self.toolbar.AddSeparator() 

     self.tonnageStatic = wx.StaticText(self.globPanel, wx.ID_ANY, "Tonnage limit (in tons): ") 
     self.tonnageEdit = wx.TextCtrl(self.globPanel, wx.ID_ANY, '30000') 
     self.tonnageSizer = wx.BoxSizer(wx.HORIZONTAL) 
     self.tonnageSizer.Add(self.tonnageStatic, flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.TOP | wx.BOTTOM, border=10) 
     self.tonnageSizer.Add(self.tonnageEdit, flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.TOP | wx.BOTTOM, border=10) 

     self.filterCheck = wx.CheckBox(self.globPanel, wx.ID_ANY, "Enable filter on matchings categories") 

     self.globSizer = wx.BoxSizer(wx.VERTICAL) 
     self.globSizer.Add(self.tonnageSizer) 
     self.globSizer.Add(wx.StaticLine(self), 0, wx.EXPAND) 
     self.globSizer.Add(self.filterCheck, 0, wx.EXPAND) 
     self.globPanel.SetSizer(self.globSizer) 

     self.sizer = wx.BoxSizer(wx.VERTICAL) 
     self.sizer.Add(self.toolbar,0,wx.EXPAND) 
     self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND) 
     self.sizer.Add(self.tab, 1, wx.EXPAND) 
     self.SetSizer(self.sizer) 
     self.Layout() 
     self.toolbar.Realize() 

     # Show it !!! 
     self.Show(1)    

def main(): 
    app = wx.PySimpleApp() 
    view = MainWindow(None, "Input filter") 
    app.MainLoop() 

if __name__ == "__main__": 
    main() 

這是slighlty這樣更好,但我不明白的靜態行,只顯示checkox標籤的第一個字符

self.tonnageStatic = wx.StaticText(self.globPanel, wx.ID_ANY, "Tonnage limit (in tons): ") 
self.tonnageEdit = wx.TextCtrl(self.globPanel, wx.ID_ANY, '30000') 
self.tonnageSizer = wx.BoxSizer(wx.HORIZONTAL) 
self.tonnageSizer.Add(self.tonnageStatic, 0, flag=wx.EXPAND|wx.ALL) 
self.tonnageSizer.Add(self.tonnageEdit, 0, flag=wx.EXPAND|wx.ALL) 

self.filterCheck = wx.CheckBox(self.globPanel, wx.ID_ANY, "Enable filter on matchings categories") 

self.globSizer = wx.BoxSizer(wx.VERTICAL) 
self.globSizer.Add(self.tonnageSizer) 
self.globSizer.Add(wx.StaticLine(self.globPanel), 0, wx.EXPAND) 
self.globSizer.Add(self.filterCheck, 0, wx.EXPAND) 
self.globPanel.SetSizer(self.globSizer) 

self.sizer = wx.BoxSizer(wx.VERTICAL) 
self.sizer.Add(self.toolbar,0,wx.EXPAND) 
self.sizer.Add(wx.StaticLine(self), 0, wx.EXPAND) 
self.sizer.Add(self.tab, 1, wx.EXPAND) 
self.SetSizer(self.sizer) 
self.globPanel.Layout() 
self.Layout() 
self.toolbar.Realize() 

# Show it !!! 
self.Show(1) 
+0

除了顯示在錯誤位置的靜態行,我認爲這是mac中筆記本的大小問題,兩個項目顯示在另一個之上。它看起來像它通常顯示爲我OSX 10.7 py2.7 wx2.8.12.1 http://bit.ly/Ko1ZVI – GP89

+0

我在Win7上運行這個,python 2.6.6,wx 2.8.12.1 –

回答

1

我只是跑它在窗口上,如果你呼籲.Layout()在globPanel後self.Layout()行它應該踢sizer成形:)

也可以使用wx.ALL這是相同的,右,左t,頂部和底部

編輯:我很好奇爲什麼奇怪的行爲,看着更多。我查看了我使用筆記本的地方,並且總是使用面板作爲頁面。如果您將NotebookPages更改爲面板,則可以取消Layout調用,並按預期工作。

+0

我糾正了一下代碼,位仍然有問題 –

+1

檢查我的編輯,這有幫助嗎? – GP89

+1

其實它解決了我的問題,非常感謝 –