14.2.2 如何处理一个网格的行和列的首部?[wxPython In Action]

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

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



图14.3


例子14.3显示了产生图14.3的代码。其中网格是用CreateGrid()初始化的。

例14.3 带自定义标签的一个非模式的网格

import wx
import wx.grid

class TestFrame(wx.Frame):

rowLabels = ["uno", "dos", "tres", "quatro", "cinco"]
colLabels = ["homer", "marge", "bart", "lisa", "maggie"]

def __init__(self):
wx.Frame.__init__(self, None, title="Grid Headers",
size=(500,200))
grid = wx.grid.Grid(self)
grid.CreateGrid(5,5)
for row in range(5):
#1 start
grid.SetRowLabelValue(row, self.rowLabels[row])
grid.SetColLabelValue(row, self.colLabels[row])
#1 end
for col in range(5):
grid.SetCellValue(row, col,
"(%s,%s)" % (self.rowLabels[row], self.colLabels[col]))

app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
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 带有自定义标签的使用了网格表的网格

import wx
import wx.grid

class TestTable(wx.grid.PyGridTableBase):
def __init__(self):
wx.grid.PyGridTableBase.__init__(self)
self.rowLabels = ["uno", "dos", "tres", "quatro", "cinco"]
self.colLabels = ["homer", "marge", "bart", "lisa", "maggie"]

def GetNumberRows(self):
return 5

def GetNumberCols(self):
return 5

def IsEmptyCell(self, row, col):
return False

def GetValue(self, row, col):
return "(%s,%s)" % (self.rowLabels[row], self.colLabels[col])

def SetValue(self, row, col, value):
pass

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

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

class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Grid Table",
size=(500,200))
grid = wx.grid.Grid(self)
table = TestTable()
grid.SetTable(table, True)

app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
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()。
posted @ 2008-01-30 11:13  Yoshow  阅读(840)  评论(0编辑  收藏  举报