wxPython - GridBagSizer



GridBagSizer 是一種多功能的佈局管理器。它提供了比 FlexiGridSizer 更多的增強功能。子部件可以新增到網格中的特定單元格。此外,子部件可以在水平和/或垂直方向上佔據多個單元格。因此,同一行中的靜態文字和多行文字控制元件可以具有不同的寬度和高度。

網格包佈局應透過確定位置、跨度和間隙來精心規劃。wx.GridBagSizer 類只有一個建構函式,它接受兩個引數。

Wx.GridBagSizer(vgap,hgap)

GridBagsizer 類最重要的方法是 Add(),它將位置作為必填引數。跨度、對齊方式、邊框標誌和邊框大小引數是可選的。如果未顯式使用,則它們將採用預設值。

Wx.GridbagSizer().Add(control, pos, span, flags, border)

下表列出了 GridBagSizer 類的各種方法:

序號 方法及描述
1

Add()

在網格中指定位置新增給定的控制元件

2

GetItemPosition()

返回控制元件在網格中的位置

3

SetItemPosition()

將控制元件放置在網格中的指定位置

4

GetItemSpan()

返回專案的行/列跨度

5

SetItemSpan()

將指定專案跨越指定數量的行/列

以下程式碼顯示了一個表單,其中包含與文字框 (TexCtrl) 關聯的標籤 (StaticText)。TextCtrl 物件新增時指定了跨度引數。因此,文字框的寬度跨越了多列。姓名文字框跨越了兩列。

tc = wx.TextCtrl(panel) 
sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5)

地址文字框是一個多行文字控制元件,跨越了三列。

tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
sizer.Add(tc1, pos = (1,1), span = (1, 3), flag = wx.EXPAND|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)

以下是完整程式碼:

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)
		
      text = wx.StaticText(panel, label = "Name:") 
      sizer.Add(text, pos = (0, 0), flag = wx.ALL, border = 5)
		
      tc = wx.TextCtrl(panel) 
      sizer.Add(tc, pos = (0, 1), span = (1, 2), flag = wx.EXPAND|wx.ALL, border = 5) 
         
      text1 = wx.StaticText(panel, label = "address") 
      sizer.Add(text1, pos = (1, 0), flag = wx.ALL, border = 5) 
		
      tc1 = wx.TextCtrl(panel,style = wx.TE_MULTILINE) 
      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) 
         
      buttonOk = wx.Button(panel, label = "Ok") 
      buttonClose = wx.Button(panel, label = "Close" ) 
		
      sizer.Add(buttonOk, pos = (4, 2),flag = wx.ALL, border = 5) 
      sizer.Add(buttonClose, pos = (4, 3), flag = wx.ALL, border = 5)
		
      panel.SetSizerAndFit(sizer)
		
app = wx.App() 
Example(None, title = 'GridBag Demo') 
app.MainLoop()

以上程式碼產生以下輸出:

GridBagDemo Output
wxpython_layout_management.htm
廣告

© . All rights reserved.