python表格 下载本文

XToCol(x) 返回包含x坐标(该坐标是相对于容器的)的列的索引。如果没有这样的列,则返回wx.NOT_FOUND。 返回右边缘最接近给定的x坐标的列的整数索引。如果没有这样的列,则返回wx.NOT_FOUND。 返回包含y坐标(该坐标是相对于容器的)的行的索引。如果没有这样的行,则返回wx.NOT_FOUND。 返回底边缘最接近给定的y坐标的行的整数索引。如果没有这样的行,则返回wx.NOT_FOUND。 XToEdgeOfCol(x) YToRow(y) YToEdgeOfRow(y) 你可以使用上面这些方法来对网格单元格上的鼠标敲击的位置作转换。

如何改变一个网格的单元格的颜色和字体?

正如其它的控件一样,这儿也有一些属性方法,你可以用来改变每个单元格的显示属性。图

14.5是个示例图片。例14.6显示了产生图14.5的代码。注意其中的针对特定单元格的网格方法和wx.grid.GridCellAttr对象的创建方法的用法。 图14.5

例14.6 改变网格的单元格的颜色

切换行号显示 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=\Attributes\,

9 size=(600,300)) 10 grid = wx.grid.Grid(self) 11 grid.CreateGrid(10,6) 12 for row in range(10): 13 for col in range(6):

14 grid.SetCellValue(row, col, \ % (row, col)) 15

16 grid.SetCellTextColour(1, 1, \)

17 grid.SetCellFont(1,1, wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD))

18 grid.SetCellBackgroundColour(2, 2, \blue\) 19

20 attr = wx.grid.GridCellAttr() 21 attr.SetTextColour(\) 22 attr.SetBackgroundColour(\)

23 attr.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD)) 24

25 grid.SetAttr(4, 0, attr) 26 grid.SetAttr(5, 1, attr) 27 grid.SetRowAttr(8, attr) 28 29

30 app = wx.PySimpleApp() 31 frame = TestFrame() 32 frame.Show() 33 app.MainLoop()

我们将通过讨论用于设置整个网格默认值的方法作为开始。你可以使用

SetDefaultCellAlignment(horiz, vert)方法来为网格中所有的单元格设置默认的对齐方式,其中horiz的取值有wx.LEFT、wx.CENTRE、wx.RIGHT,vert的取值有wx.TOP, wx.CENTRE, 和wx.BOTTOM。你可以使用GetDefaultCellAlignment()来得到这个默认的单元格对齐方式,该方法返回一个(horiz, vert)元组。

背景和文本的颜色可以使用SetDefaultCellTextColour(colour)和

SetDefaultCellBackgroundColour(colour)方法来设置。同样,colour参数可以是一个wx.Colour实例或颜色名。相应的get*方法是GetDefaultCellTextColour()和

GetDefaultCellBackgroundColour()。最后,你可以使用

SetDefaultCellFont(font)和GetDefaultCellFont()来处理默认的字体。

使用下面的方法,你可以设置单个单元格的相关属性:

GetCellAlignment(row, col) SetCellAlignment(row, col, horiz, vert) GetCellBackgroundColour(row, col) SetCellBackgroundColour(row, col, colour) GetCellFont(row, col) SetCellFont(row, col, font) GetCellTextColour(row, col) SetCellTextColour(row, col, colour) 也可使用SetSelectionBackground(colour)和SetSelectionForeground(colour)方法来使用被选的单元格有另外背景色和前景色,相应的get*方法是GetSelectionBackground()和GetSelectionForeground()。

你也可以使用SetMargins(extraWidth, extraHeight)方法来设置网格控件与它的容器的边距。

在内部,类wx.grid.Grid使用一个名为wx.grid.GridCellAttr类来管理每个单元格的属性。wx.grid.GridCellAttr类对于本节所讨论到的属性,也有get*和set*方法。你可以通过使用GetOrCreateCellAttr(row, col)方法来得到关于一个特定的单元格的attr对象,它是单元格的属性对象。一个单元格的属性对象仅在该单元格已定义了非默认的属性时才被创建。一旦你有了该单元格的属性对象,你就可以用它来定义该单元格的显示属性。

要创建你自己的单元格属性对象,这个构造函数是wx.grid.GridCellAttr()。你可以设置某些参数,然后将该对象传递给方法SetColAttr(attr)或SetRowAttr(attr),这两个方法将将这些显示属性应用到该行或列中的每个单元格,如例14.6所示。

如果你在使用一个网格表,你可以覆盖方法GetAttr(row, col)来返回特定单元格的一个wx.grid.GridCellAttr实例。

你也可以改变网格线的颜色和显示。网格线的显示是由方法EnableGridLines(enable)来控制的。参数enable是一个布乐值。如果为True,网格线被显示,如果为False,则不显示。你可以使用方法SetGridLineColor(colour)来改变网格线的颜色。

自定义描绘器和编辑器

是什么使得网格控件是如此的灵活和有用呢?它就是显示或编辑一个单元格的内容的机制可以被改变这一特性。在后面的几节中,我们将给你展示如何去使用预定义的描绘器和编辑器,以及如何写你自己的描绘器和编辑器。

如何使用一个自定义的单元格描绘器?

默认情况下,网格将它的数据以简单字符串的形式显示,然而,你也可以以不同的格式显示你的数据。你可以想将布尔值数据显示为一个复选框,或以图片格式显示一个数字值,或将一个数据的列表以线条的方式显示。

在wxPython中,每个单元格都可以有它自己的描绘器,这使得它能够以不同的方式显示它的数据。下面的部分讨论几个wxPython中预定义的描绘器,以及如何定义你自己的描绘器。

预定义的描绘器(renderer)

一个网格描绘器是类wx.grid.GridCellRenderer的一个实例,

wx.grid.GridCellRenderer是一个抽象的父类。一般,你会使用它的子类。表14.4说明了几个你可以用在你的单元格中的预定义的描绘器。它们都有一个构造函数和get*,set*方法。

表14.4 预定义的网格单元格描绘器

wx.grid.GridCellAutoWrapStringRenderer 显示文本化的数据,在单元格边界按词按行。 使用一个复选框来描绘布尔数据——选中表示True,未选中表示False。 使单元格能够显示一个格式化的日期或时间。 文本形式。 使用指定位数和精度来描绘浮点数。该类的构造函数要求两个参数(width=-1, precision=-1)。默认的对齐方式为右对齐。 数字数据。默认为右对齐方式显示。 简单字符串的形式。 wx.grid.GridCellBoolRenderer wx.grid.GridCellDateTimeRenderer wx.grid.GridCellEnumRenderer wx.grid.GridCellFloatRenderer wx.grid.GridCellNumberRenderer wx.grid.GridCellStringRenderer 要得到一个特定单元格的描绘器,可以使用方法GetCellRenderer(row, col),该方法返回指定坐标处的单元格的描绘器实例。要为一个单元格设置描绘器,可以使用