python表格 下载本文

如何处理一个网格的行和列的首部?

在一个wxPython的网格控件中,每行和每列都有它们自己的标签。默认情况下,行的标签是数字,从1开坮。列的标签是字母,从A开始。wxPython提供了一些方法来改变这些标签。图14.3显示了一个带有首部标签的网格。 图14.3

例子14.3显示了产生图14.3的代码。其中网格是用CreateGrid()初始化的。 例14.3 带自定义标签的一个非模式的网格

切换行号显示 1 import wx 2 import wx.grid 3

4 class TestFrame(wx.Frame): 5

6 rowLabels = [\, \, \, \, \] 7 colLabels = [\, \, \, \, \] 8

9 def __init__(self):

10 wx.Frame.__init__(self, None, title=\Headers\,

11 size=(500,200)) 12 grid = wx.grid.Grid(self) 13 grid.CreateGrid(5,5) 14 for row in range(5):

15 #1 start

16 grid.SetRowLabelValue(row, self.rowLabels[row])

17 grid.SetColLabelValue(row, self.colLabels[row]) 18 #1 end

19 for col in range(5):

20 grid.SetCellValue(row, col,

21 \ % (self.rowLabels[row], self.colLabels[col])) 22

23 app = wx.PySimpleApp() 24 frame = TestFrame() 25 frame.Show() 26 app.MainLoop()

正如添加和删除行一样,改变标签也是根据网格的类型而不同的。对于使用CreateGrid()创建的网格,要使用SetColLabelValue(col, value)和

SetRowLabelValue(row, value)方法来设置标签值,如#1所示。参数col和row是列和行的索引,value是要显示在标签中的字符串。要得到一行或一列的标签,使用GetColLabelValue(col)和GetRowLabelValue(row)方法。

对于使用外部网格表的一个网格控件,你可以通过覆盖网格表的GetColLabelValue(col)和GetRowLabelValue(row)方法来达到相同的作用。为了消除混淆,网格控件在当它需要显示标签并且网格有一个关联的表时,内在地调用这些方法。由于返回值是动态地由你在覆盖的方法中所写的代码决定的,所以这里不需要覆盖或调用set*方法。不过set*方法仍然存在——SetColLabelValue(col, value)和

SetRowLabelValue(row, value)——但是你很少会使用到,除非你想让用户能够改变潜在的数据。通常,你不需要set*方法。例14.4显示了如何改变网格表中的标签——这个例子产生与上一例相同的输出。

例14.4 带有自定义标签的使用了网格表的网格

切换行号显示 1 import wx 2 import wx.grid 3

4 class TestTable(wx.grid.PyGridTableBase): 5 def __init__(self):

6 wx.grid.PyGridTableBase.__init__(self) 7 self.rowLabels = [\, \, \, \, \]

8 self.colLabels = [\, \, \, \, \] 9

10 def GetNumberRows(self): 11 return 5 12

13 def GetNumberCols(self): 14 return 5 15

16 def IsEmptyCell(self, row, col): 17 return False 18

19 def GetValue(self, row, col):

20 return \ % (self.rowLabels[row], self.colLabels[col]) 21

22 def SetValue(self, row, col, value): 23 pass 24

25 def GetColLabelValue(self, col):#列标签 26 return self.colLabels[col] 27

28 def GetRowLabelValue(self, row):#行标签 29 return self.rowLabels[row] 30

31 class TestFrame(wx.Frame): 32 def __init__(self):

33 wx.Frame.__init__(self, None, title=\Table\,

34 size=(500,200)) 35 grid = wx.grid.Grid(self) 36 table = TestTable()

37 grid.SetTable(table, True) 38

39 app = wx.PySimpleApp() 40 frame = TestFrame() 41 frame.Show() 42 app.MainLoop()

默认情况下,标签是居中显示的。但是你也可以使用

SetColumnLabelAlignment(horiz, vert)和

SetRowLabelAlignment(horiz, vert)来改变这个行为。其中参数horiz用以控制水平对齐方式,取值有wx.ALIGN_LEFT, wx.ALIGN_CENTRE或wx.ALIGN_RIGHT。参数vert用以控制垂直对齐方式,取值有wx.ALIGN_TOP, wx.ALIGN_CENTRE,或wx.ALIGN_BOTTOM。

行和列的标签区域共享一套颜色和字体属性。你可以使用

SetLabelBackgroundColour(colour) , SetLabelFont(font), and SetLabelTextColour(colour)方法来处理这些属性。参数colour是wx.Colour的一个实例或wxPython会转换为颜色的东西,如颜色的字符串名。参数font是wx.Font的一个实例。与set*相应的get*方法有GetLabelBackgoundColour(), GetLabelFont(),和GetLabelTextFont()。

如何管理网格元素的尺寸?

网格控件提供了几个不同的方法来管理单元格、行和列的尺寸。在这一节,我们将讨论这些方法。图14.4显示了一些用来改变一个特定的单元格的尺寸的方法。 例14.5显示了创建了一个带有可调节大小的单元格、行和列的网格。 图14.4

例14.5 可调整尺寸的单元格的示例代码

切换行号显示 1 import wx 2 import wx.grid 3

4 class TestFrame(wx.Frame): 5 6

7 def __init__(self):

8 wx.Frame.__init__(self, None, title=\Sizes\,

9 size=(600,300))