wxPython에 참고 : wxPython에 인터페이스 레이아웃 모드 (b)의 wxPython 참고 : wxPython에의 인터페이스 레이아웃 (a)

머리말

전면 의 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()

추천

출처www.cnblogs.com/-wenli/p/12147619.html