wxPython中sizer是否可以添加在window中

学习sizer,着实让人困惑的一点是sizer和container是一个什么关系. 理论是说一个container绑定一个sizer. 然后放入container的所有的控件都可以用sizer来管理. 

假设现在要创建下面的界面:

wxPython中sizer是否可以添加在window中_第1张图片

菜单栏, 文本输入框, 结果显示框(即多行文本框), 状态栏是否都要放到sizer中? 这个sizer是要附在window上呢? 还是要创建一个面板,然后将sizer附在panel上,然后再来添加相关的控件?

无论如何,先动手实现一个看看.

 

---------->>
抽空简单的实现了界面. 同时,在wxpythoninaction中看到一句话,基本上回答了上面的一个问题:
你基本上应该使用一个wx.Panel作为你的框架的顶级子窗口部件.

 1 #/usr/bin/python
 2 #-*-<coding=UTF-8>-*-
 3 
 4 """
 5 本例为windows下everything程序的linux版本.后端基于locate实现.
 6 """
 7 
 8 import wx
 9 
10 class GuiMainFrame(wx.Frame):
11     
12     def __init__(self):
13         wx.Frame.__init__(self,parent=None,id=-1,title="",pos=wx.DefaultPosition,size=wx.DefaultSize)
14         
15         #添加面板.
16         panel = wx.Panel(self)
17         
18         menubar = wx.MenuBar()
19         
20         fileMenu = wx.Menu()
21         fileMenu.Append(-1,"&Open","")
22         menubar.Append(fileMenu,"&File")
23 
24         #Edit menu
25         editMenu = wx.Menu()
26         editMenu.Append(-1,"&Copy","")
27         menubar.Append(editMenu,"&Edit")
28 
29         #Help/About menu
30         helpMenu = wx.Menu()
31         helpMenu.Append(-1,"About","")
32         menubar.Append(helpMenu,"&Help")
33         
34         #调用SetMenuBar,使其在框架中显示出来
35         self.SetMenuBar(menubar)
36         
37         #在面板中添加文本输入框
38         filterInput = wx.TextCtrl(panel,-1,"")
39         self.filter = wx.SearchCtrl(panel,style=wx.TE_PROCESS_ENTER)
40         self.filter.ShowCanelButton(True)
41         self.filter.Bind(wx.EVT_TEXT,self.RefeshText)
42         self.filter.Bind(wx.EVT_TEXT_ENTER,self.DoSearch)
43         fileType = wx.TextCtrl(panel,-1,"")
44         #输出结果显示框
45         mutiText = wx.TextCtrl(panel,-1,"",style=wx.TE_MULTILINE|wx.TE_PROCESS_ENTER)
46         mutiText.SetMinSize((800,600))
47 
48         #添加状态栏,是否要加入到sizer中管理.
49         statusbar = self.CreateStatusBar()
50     
51         #管理布局.
52         mainSizer = wx.BoxSizer(wx.VERTICAL)
53         
54         filterSizer = wx.GridSizer(rows=1,cols=2)
55         filterSizer.Add(filterInput,0,wx.EXPAND)
56         filterSizer.Add(fileType,0,wx.EXPAND)
57 
58         #这句话导致文本框显示有空隙. 为什么不能这样用? menubar是否不需要添加进mainSizer
59         #mainSizer.Add(menubar)
60         mainSizer.Add(filterSizer,0,wx.EXPAND)
61         mainSizer.Add(mutiText,2,wx.EXPAND|wx.ALL)
62         #frame中创建的statusbar,不需要添加到sizer中进行管理.
63         #mainSizer.Add(statusbar,0,wx.EXPAND)
64         
65         #这个是关键之处,将sizer与frame关联起来.
66         panel.SetSizer(mainSizer)
67         mainSizer.Fit(self)
68 
69 
70 if __name__ == "__main__":
71     app = wx.PySimpleApp()
72     frame = GuiMainFrame()
73     frame.Show()
74     app.MainLoop()

在ubuntu下显示如下:

wxPython中sizer是否可以添加在window中_第2张图片

 

 

 

你可能感兴趣的:(wxPython)