2012-06-08 5 views
1

notebookPage 패널의 세로 레이아웃 크기 조정 도구 안에 가로 레이아웃으로 크기 조정 도구를 중첩 시키려고합니다.wxnotebook을 사용하여 wxpython boxsizer 문제를 해결했습니다.

나는 영감을 wxPython: Resizing a notebook within a notebook에서 가져 왔지만 제대로 작동하지는 않습니다.

대신 (톤에서)이 레이아웃을

톤수 제한을 가져 오는 : [3000]
[X]

모든이의 한 줄에 엉망이다 matchings 범주에 필터를 사용 패널

다음은 2.8.12.1

는 WX

내가 Win7에, 파이썬 2.6.6에서이 작업을 실행하고, 관련 코드 :

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

난 그냥 달렸다 창문에 그리고 self.Layout() 라인 이후에 globPanel에 .Layout()을 호출하면 셰이핑을 수행해야합니다.

또한 wx.ALL도 사용할 수 있습니다. t, 상단 및 하단

EDIT : 왜 이상한 행동인지 궁금해서 조금 더 살펴 보았습니다. 필자는 필자가 노트를 사용했던 곳을 보았고 항상 페이지에 패널을 사용합니다. NotebookPages를 패널로 변경하면 Layout 호출을 없앨 수 있으며 예상대로 작동합니다.

+0

나는 조금 수정했다. 코드, 비트 여전히 문제가 –

+1

내 편집 확인, 그 도움이됩니까? – GP89

+1

사실, 내 문제를 해결해 줘서 고마워. –