머리말
전면 의 wxPython 노트 : wxPython에 인터페이스 레이아웃 (a)는 그리드 가방없이 도입 플렉스 그리드를 떠나, 그리드, 상자, 정적 상자 세 가지 레이아웃 방법을 소개했다.
- 플렉스 그리드 : 그리드 사이 저 약간 약간의 변경을 위해 윈도우 구성원이 서로 다른 크기를 갖는 경우, 더 좋은 결과를 가질 수있다.
- 시리즈 선별기 그리드 가장 유연한 회원 : 그리드 가방. 윈도우가보다 자유롭게 배치 될 수 있도록 격자 부재.
그리드는 플렉스 그리드 사이 저와 구라 두 가방 사이 저 자연의 변종이다.
플렉스 그리드 사이 저
플렉스 그리드 선별기는 그리드 사이 저보다 유연한 버전입니다. 그것은 다음과 같은 예외를 제외하고, 표준 그리드 사이 저와 거의 동일합니다 :
- 1, 각 행 및 각 열에는 자신의 크기를 가질 수있다. 비율을 매개 변수로.
- 2는 기본적으로 크기를 조정하면, 그것의 세포의 크기를 변경하지 않습니다. 원하는 경우, 행 또는 성장해야 열 어떤을 지정할 수 있습니다.
- 도 3은, 유연하면 하위 요소의 각각의 컬럼에 대한 특정 량을 지정할 수있는 수단을 두 방향 중 하나에서 증가 될 수 있으며, 일정 방향의 동작을 지정할 수있다.
예를 들면 :
플렉스 그리드 선별기는 wx.FlexGridSizer의 한 예입니다. 부동산 wx.GridSizer 방법은 여전히 유효하므로 Wx.FlexGridSizer 클래스는 wx.GridSizer의 서브 클래스입니다.
wx.FlexGridSizer의 생성자와 그의 아버지는 동일합니다 :
wx.FlexGridSizer (행 COLS, vgap에, hgap에)
선별기는 행 또는 열 또한 확장을 확장 할 때, 당신은 명시 적으로 확장되는 선별기의 행 또는 열에게 적절한 방법을 사용합니다 :
(지수 AddGrowableCol 비중 = 0) 비율 # 파라미터 열 지정
AddGrowableRow을 (인덱스, 비중 = 0) 비율 # 파라미터 행을 지정
새로운 폭의 기본 동작에 풀칠 수평 확장은, 동등하게 각 확장 컬럼에 할당됩니다. 유사하게, 수직 크기 조정은 동일하게 각 행의 확장에 할당 될 수있다.
이 기본 동작을 변경하고 다른 행과 열을 사용하여 사용해야 확산 속도가 지금은없는가하는 비율 매개 변수를 . 비율 매개 변수를 사용하는 경우, 새로운 공간과 연관된 매개 변수에 할당 된
각각의 행 또는 열. 당신이이 행 크기 조절이 있고, 그 비율이 1과 2 경우 예를 들어,이 라인은 새로운 공간의 제 3 분의 2를 제공합니다 두 번째 줄은 1/3을 줄 것이다.
예
수입 WX의 클래스 예 (wx.Frame) : 데프 __init__ (자기, 부모, 제목) : 슈퍼 (예, 자기). __init__ (부모, 표제 = 타이틀 크기 = (300, 250 )) self.InitUI () self.Centre () self.Show () DEF InitUI (자기) 패널 = wx.Panel (자기) hbox가 = wx.BoxSizer (wx.HORIZONTAL) # 三行两列 FGS = wx.FlexGridSizer (3, 2, 10, 10 ) 제목 = wx.StaticText (패널, 라벨 = " 제목 " ) 저자= wx.StaticText (패널, 라벨 = " 이름 저자의 " ) 검토 = wx.StaticText (패널, 라벨 = " 검토 " ) TC1 = wx.TextCtrl (패널) TC2 = wx.TextCtrl (패널) TC3 = WX. TextCtrl (패널, 스타일 = wx.TE_MULTILINE) fgs.AddMany ([(제목), (TC1, 1 , wx.EXPAND), (저자), (TC2, 1, wx.EXPAND), (리뷰, 1, WX. 확장형) (TC3, 1 , wx.EXPAND)]) fgs.AddGrowableRow ( 2, 3) # 第3行, 3/5占 fgs.AddGrowableCol (1, 3) # 第2列,占3/5 hbox.Add (FGS, 비중 = 2 플래그 = wx.ALL | wx.EXPAND 테두리 = 15 ) panel.SetSizer (hbox에) 앱 = WX .APP () 실시 예 (없음, 표제 = ' FlexGridSizer ' ) app.MainLoop ()
구라 두 가방 사이 저
그리드 백 선별기는 상기 플렉스 그리드 사이 저를 향상된다. : 구라 두 가방 사이 저에서 두 개의 새로운 변화가있다
(1), 위젯이 특정 셀에 추가 될 수있다.
2 창 부재는 여러 셀들에 걸쳐 (동일한 기능을 수행 할 수있는 HTML 형식의 형태로) 할 수있다.
예를 들면 :
구라 두 가방 선별기는 wx.GridBagSizer의 예, wx.GridBagSizer는 wx.FlexGridSizer의 서브 클래스입니다. 모든 플렉스 그리드 사이 저 호텔이 구라 두 가방 사이 저를 적용하는 것이이 의미합니다.
wx.GridBagSizer 생성자와 부모 조금 다른 :
wx.GridBagSizer (vgap에 = 0, = 0은 hgap)
在一个grid bag sizer中,你不必去指定行和列的数量,因为你可以直接将子项目添加进特定的单元格——sizer将据此计算出网格的尺度。
重点:
在grid bag sizer中add方法也不一样:
Add(window, pos, span=wx.DefaultSpan, flag=0, border=0, userData=None) Add(sizer, pos, span=wx.DefaultSpan, flag=0, border=0, userData=None) Add(size, pos, span=wx.DefaultSpan, flag=0, border=0, userData=None) AddItem(item)
其实重要的是两个参数,因为grid bag sizer中你没有指定行和列,所以,每一个控件在哪个位置,占据多大的空间,都需要手动调整。
pos参数代表sizer中的窗口部件要赋予的单元格。
pos参数其实就是一个二维地址,从0开始计算
span参数代表窗口部件应该占据的行和列的数量。
span参数是你设置控件占据的大小,占多少行,占多少列
实例
import wx class Example(wx.Frame): def __init__(self, parent, title): super(Example, self).__init__(parent, title=title) self.InitUI() self.Centre() self.Show() def InitUI(self): panel = wx.Panel(self) sizer = wx.GridBagSizer(0, 0) #pos=(0, 0):放在1行1列,不设置span,默认span=(1,1)占一行一列的大小 text = wx.StaticText(panel, label="Name:") sizer.Add(text, pos=(0, 0), flag=wx.ALL, border=5) # pos=(0, 1):放在1行2列,span=(1, 3),占一行三列的大小 tc = wx.TextCtrl(panel) sizer.Add(tc, pos=(0, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5) # pos=(0, 4):放在1行5列,span=(6, 3),占六行三列的大小 #这里为什么是第5列,因为第一行前面两个控件span=(1,1),span=(1, 3),1+3=4。 tc4 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) sizer.Add(tc4, pos=(0, 4), span=(6, 3), flag=wx.EXPAND | wx.ALL, border=5) text1 = wx.StaticText(panel, label="address") tc1 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) sizer.Add(text1, pos=(1, 0), flag=wx.ALL, border=5) sizer.Add(tc1, pos=(1, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5) text2 = wx.StaticText(panel, label="age") sizer.Add(text2, pos=(2, 0), flag=wx.ALL, border=5) tc2 = wx.TextCtrl(panel) sizer.Add(tc2, pos=(2, 1), flag=wx.ALL, border=5) text3 = wx.StaticText(panel, label="Mob.No") sizer.Add(text3, pos=(2, 2), flag=wx.ALIGN_CENTER | wx.ALL, border=5) tc3 = wx.TextCtrl(panel) sizer.Add(tc3, pos=(2, 3), flag=wx.EXPAND | wx.ALL, border=5) text4 = wx.StaticText(panel, label="Description") sizer.Add(text4, pos=(3, 0), flag=wx.ALL, border=5) tc4 = wx.TextCtrl(panel, style=wx.TE_MULTILINE) sizer.Add(tc4, pos=(3, 1), span=(1, 3), flag=wx.EXPAND | wx.ALL, border=5) sizer.AddGrowableRow(3) panel.SetSizerAndFit(sizer) app = wx.App() Example(None, title='GridBagSizer') app.MainLoop()