2013-10-10 5 views
0

다음 코드를 적용하면 두 번째 패널이 첫 번째 패널 위에 표시됩니다. 두 개의 패널을 겹치지 않고 적절한 크기의 창 (프레임)으로 가져올 수있는 방법을 알고 싶습니다. 또한 패널에 어떤 종류의 제목을 그릴 수있는 적절한 방법이 있는지 알고 싶습니다 (이 경우 "입력 :"및 "출력 :"). 감사!wxpython 패널 크기 및 제목

import wx 

class Input_Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # Input variables 
     self.tittle1 = wx.StaticText(self, label="Inputs:")  
     self.lblname1 = wx.StaticText(self, label="Input 1:") 
     self.format1 = ['Option 1','Option 2'] 
     self.combo1 = wx.ComboBox(self, size=(200, -1),value='', choices=self.format1, style=wx.CB_DROPDOWN) 
     self.lblname2 = wx.StaticText(self, label="Input 2") 
     self.format2 = ['Option 1','Option 2', 'Option 3'] 
     self.combo2 = wx.ComboBox(self, size=(200, -1),value='', choices=self.format2, style=wx.CB_DROPDOWN) 

     # Set sizer for the panel content 
     self.sizer = wx.GridBagSizer(2, 2) 
     self.sizer.Add(self.tittle1, (1, 2)) 
     self.sizer.Add(self.lblname1, (2, 1)) 
     self.sizer.Add(self.combo1, (2, 2)) 
     self.sizer.Add(self.lblname2, (3, 1)) 
     self.sizer.Add(self.combo2, (3, 2)) 
     self.SetSizer(self.sizer) 

class Output_Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # Output variables 
     self.tittle2 = wx.StaticText(self, label="Outputs:")  
     self.lblname3 = wx.StaticText(self, label="Output1") 
     self.result3 = wx.StaticText(self, label="", size=(100, -1)) 

     # Set sizer for the panel content 
     self.sizer = wx.GridBagSizer(2, 2) 
     self.sizer.Add(self.tittle2, (1, 2)) 
     self.sizer.Add(self.lblname3, (2, 1)) 
     self.sizer.Add(self.result3, (2, 2)) 
     self.SetSizer(self.sizer) 

class Main_Window(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title = title) 

     # Set variable panels 
     self.splitter = wx.SplitterWindow(self) 
     self.panel1 = Input_Panel(self.splitter) 
     self.panel2 = Output_Panel(self.splitter) 
     self.splitter.SplitVertically(self.panel1, self.panel2) 

     self.windowSizer = wx.BoxSizer(wx.VERTICAL) 
     self.windowSizer.Add(self.splitter, 1, wx.ALL | wx.EXPAND) 
     self.SetSizerAndFit(self.windowSizer) 

def main(): 
    app = wx.App(False) 
    frame = Main_Window(None, "App GUI") 
    frame.Show() 
    app.MainLoop() 

if __name__ == "__main__" : 
    main() 

답변

0

self.SetSizer(self.sizer) 

수정을하고 또한 output_Panel 클래스는 패널의 크기를 올바르게 조정합니다.

0

위젯 검사 도구를 사용하면 무슨 일이 일어나는지 파악할 수 있습니다. 각 패널의 크기와 크기를 파악하기 위해 강조 표시 기능을 사용했습니다. 여기에 대한 자세한 내용은 여기를 참조하십시오. http://wiki.wxpython.org/Widget%20Inspection%20Tool

SplitterWindow는 항목을 균등하게 분할하지 않습니다. Splitter의 SetMinimumPaneSize를 호출하여 둘 다 볼 수있게해야합니다. 내가 이야기하고 또한 검사 도구를 추가하는 방법을 보여주기 위해 무엇을 표시하도록 코드를 수정 : Input_Panel에

self.SetSizerAndFit(self.sizer) 

에 의해

import wx 

class Input_Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # Input variables 
     self.tittle1 = wx.StaticText(self, label="Inputs:")  
     self.lblname1 = wx.StaticText(self, label="Input 1:") 
     self.format1 = ['Option 1','Option 2'] 
     self.combo1 = wx.ComboBox(self, size=(200, -1),value='', choices=self.format1, style=wx.CB_DROPDOWN) 
     self.lblname2 = wx.StaticText(self, label="Input 2") 
     self.format2 = ['Option 1','Option 2', 'Option 3'] 
     self.combo2 = wx.ComboBox(self, size=(200, -1),value='', choices=self.format2, style=wx.CB_DROPDOWN) 

     # Set sizer for the panel content 
     self.sizer = wx.GridBagSizer(2, 2) 
     self.sizer.Add(self.tittle1, (1, 2)) 
     self.sizer.Add(self.lblname1, (2, 1)) 
     self.sizer.Add(self.combo1, (2, 2)) 
     self.sizer.Add(self.lblname2, (3, 1)) 
     self.sizer.Add(self.combo2, (3, 2)) 
     self.SetSizer(self.sizer) 

class Output_Panel(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     # Output variables 
     self.tittle2 = wx.StaticText(self, label="Outputs:")  
     self.lblname3 = wx.StaticText(self, label="Output1") 
     self.result3 = wx.StaticText(self, label="", size=(100, -1)) 

     # Set sizer for the panel content 
     self.sizer = wx.GridBagSizer(2, 2) 
     self.sizer.Add(self.tittle2, (1, 2)) 
     self.sizer.Add(self.lblname3, (2, 1)) 
     self.sizer.Add(self.result3, (2, 2)) 
     self.SetSizer(self.sizer) 

class Main_Window(wx.Frame): 
    def __init__(self, parent, title): 
     wx.Frame.__init__(self, parent, title = title, size=(800,600)) 

     # Set variable panels 
     self.splitter = wx.SplitterWindow(self, style = wx.SP_LIVE_UPDATE) 
     self.panel1 = Input_Panel(self.splitter) 
     self.panel2 = Output_Panel(self.splitter) 
     self.splitter.SplitVertically(self.panel1, self.panel2) 
     w, h = self.GetSize() 
     self.splitter.SetMinimumPaneSize(w/2) 

     self.windowSizer = wx.BoxSizer(wx.VERTICAL) 
     self.windowSizer.Add(self.splitter, 1, wx.ALL | wx.EXPAND) 

     #self.SetSizerAndFit(self.windowSizer) 

def main(): 
    import wx.lib.inspection 
    app = wx.App(False) 
    frame = Main_Window(None, "App GUI") 
    frame.Show() 
    wx.lib.inspection.InspectionTool().Show() 
    app.MainLoop() 

if __name__ == "__main__" : 
    main() 
+0

대단히 고맙습니다 만, 각 패널마다 다른 크기를 설정할 수 있는지 알고 싶습니다. 확장 된 코드에서 오른쪽 패널은 왼쪽 패널보다 훨씬 작으며 "self.splitter.SetMinimumPaneSize (120)"를 사용할 때별로 좋지 않습니다. 그리고 이전에 물어 보았던 것처럼 제목을 추가 할 수 있습니까? – wuampa

+0

실제로 프레임의 크기를 사용하고 창 크기를 절반으로 설정하면 크기가 동일 해집니다. 제목에 관해서는 StaticText 위젯이나 비슷한 것을 사용해야 할 것입니다. –

+0

제가 너무 많이 원한다는 것을 알고 있지만 예제를 물어볼 수 있습니까? – wuampa