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)) 10 grid = wx.grid.Grid(self) 11 grid.CreateGrid(5,5) 12 for row in range(5):
13 for col in range(5):
14 grid.SetCellValue(row, col, \ % (row, col)) 15
16 grid.SetCellSize(2, 2, 2, 3)
17 grid.SetColSize(1, 125) 18 grid.SetRowSize(1, 100) 19
20 app = wx.PySimpleApp() 21 frame = TestFrame() 22 frame.Show() 23 app.MainLoop()
改变单元格的尺寸
一个作用于单元格尺寸的基本的方法是使它跨多行或多列,类似于HTML的rowspan和colspan。要达到这种效果,在wxPython中可以使用方法SetCellSize(row, col, num_rows, num_cols)。该方法设置坐标row,col处的单元格跨num_rows行和num_cols列。在通常的情形下,每个单元格占据一行和一列,要使用单元格不止占据一行或一列,你需要给参数num_rows, num_cols大于1的值。参数num_rows, num_cols的值小于等于0会导致错误。如果你的设置使得一个单元格的尺寸与另一个早先声明为跨越的单元格的尺寸相重叠时,早先的这个单元格的尺寸会重置为占据一行和一列。你也能够使用方法SetCellOverflow(row, col, allow)方法来关闭单元格的跨越显示。只要在该方法中使用pass就可以阻止单元格跨越了,即使已经使用了SetCellSize()方法来设置它的尺寸。
调整网格的尺寸的一个更加典型的方法是基于一行或一列来处理其像素尺寸。你可以使用
SetColSize(col, width)和SetRowSize(row, height)方法来改变一列或一行的宽度。当然,你可以使用GetColSize(col)或GetRowSize(row)来确定一列或一行的当前
尺寸。 设置默认尺寸
你可以通过改变所有的行和列的默认尺寸来改变整个网格的尺寸。方法如下:
SetDefaultColSize(width, resizeExistingCols=False) SetDefaultRowSize(height, resizeExistingRows=False)
其中的第一个参数是以像素为单位的新的默认尺寸。如果第二个布尔参数的值是True,那么当前存在的所有行或列立即被调整到新的默认尺寸。如果第二个参数的值为False,那么这个新的默认尺寸仅被应用于新添加的行或列。通常,设置新的默认值是在初始化的开头,甚至是在调用CreateGrid()或SetTable()之前。你可以使用GetDefaultColSize()和GetDefaultRowSize()方法来得到当前的默认尺寸。
设置默认尺寸与为单个行或列设置尺寸相比,有一个性能上的问题。对于存储默认值,
wxPython只需要存储这两个整数。如果你将单个行或列设置到一个非默认的尺寸,
wxPython切换并将每个行或列的尺寸存储到一个数组中。如果你的表是非常的大的话,这
将明显地占用很多的内存,因此这是需要注意的。
有时,你想为一行或一列设置一个最小的尺寸,以便不用担心程序的某个方法的调用或用户对网格线的拖动会致使该行或列变得更小。
在wxPython中,你可以对一个网格的宽度设置最小值或为单独的行和列分别设置最小尺寸值。要改变整个网格的最小尺寸,可以使用方法
SetColMinimalAcceptableWidth(width)或
SetRowMinimalAcceptableHeight(height)。其中的参数是针对所有行或列的最小的像素尺寸。要一行一行的设置最小尺寸,使用方法SetColMinimalWidth(col, width)或SetRowMinimalHeight(row, height)。其中第一个参数是要调整尺寸的项目的索引,
第二个参数是以像素为单位的新的尺寸。单个的行的最小尺寸必须比最小的网格尺寸大,如果单个的行的最小尺寸被设置了的话。上面的set*方法都有一个相应的get*方法: * GetColMinimalAcceptableWidth() * GetRowMinimalAcceptableHeight() * GetColMinimalWidth(col) * GetRowMinimalHeight(row) 设置标签的尺寸
网格上的标签区域有一套单独的调整尺寸的函数。在这种情况下,你是在设置行标签的宽度和列标签的高度,意思就是,把列标签作为一个特殊的行,把行标签作为一个特殊的列。
set*方法有SetRowLabelSize(width),它设置行标签的宽度,
SetColLabelSize(height),它设置列标签的高度。你可以使用相应的GetRowLabelSize()和GetColLabelSize()方法来得到这些尺寸。
通常,你不会关心单元格的实际的像素尺寸,你希望它们被自动调整到足够显示你的数据的大小。在wxPython中,你可以通过使用AutoSize()方法来自动调整整个网格的尺寸。该方法使得所有的行和列的尺寸与它们中的内容相适应。你也可以对单个的行或列使用
AutoSizeColumn(col, setAsMin=True)和AutoSizeRow(row, setAsMin=True)来使它们的尺寸自动与其中的内容相适应。如果参数setAsMin为True,那么新的自动的尺寸将作为该行或列的最小尺寸。AutoSizeColumns(setAsMin=True)和AutoSizeRows(setAsMin=True)自动调整所有的列和行的尺寸。
你也可以让用户通过拖动标签单元格的边框来调整行的尺寸。用于实现这种行为的主要的方法如下:
? ? ?
EnableDragColSize(enable=True):控制用户能否通过拖动边框来改变标签的
宽度
EnableDragRowSize(enable=True):控制用户能否通过拖动边框来改变标签的
高度
EnableDragGridSize(enable=True):控制用户能否通过拖动边框一次性改变
标签的宽度和高度
下面的方法是上面方法的相应的使拖动无效的简便的方法:
? ?
DisableDragColSize() DisableDragRowSize()
?
DisableDragGridSize()
下面的一套方法用以判断能否拖动:
? ? ?
CanDragColSize() CanDragRowSize() CanDragGridSize()
如何管理哪些单元格处于选择或可见状态?
在网格控件中,用户可以选择一个或多个单元格。在wxPython中,有几个方法让你能够处理多选的情况。
在下面的几个情况中,网格控件中的被选择的项可以是0个或多个:
? ? ? ?
单个的处于选择状态的单元格 被选择的行 被选择的行
被选择的由单元格组成的块
用户可以通过命令或在单元格、行或列标签上的敲击,或拖动鼠标来选择多组单元格。要确定网格中是否有被选择的单元格,可能使用方法IsSelection(),如果有则该方法返回True。你可以通过使用IsInSelection(row, col)方法来查询任意一个特定的单元格当前是否处于选择状态中,如果是则返回True。
表14.2显示了几个方法,它们得到当前被选择的内容并返回给你。 表14.2 返回当前被选择的单元格的集的方法
GetSelectedCells() 返回包含一些单个的处于选择状态的单元格的一个Python列表。在这个列表中的每个项目都是一个(row, col)元组。 返回由通过敲击列的标签而被选择的列的索引组成的一个Python列表。 返回由通过敲击行的标签而被选择的列的索引组成的一个Python列表。 返回包含一些被选择的由单元格组成的块的一个Python列表。其中的每个元素都时一个(row, col)元组,(row, col)元组是每块的左上角。 返回包含一些被选择的由单元格组成的块的一个Python列表。其中的每个元素都时GetSelectedCols() GetSelectedRows() GetSelectionBlockTopLeft() GetSelectionBlockBottomRight()
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库python表格(3)在线全文阅读。
相关推荐: