一个(row, col)元组,(row, col)元组是每块的右下角。 这儿也有几个用于设置或修改选择状态的方法。第一个是ClearSelection(),它清除当有的被选状态。在该方法被调用以后,IsSelection()返回False。你也可以做一个相反的动作,就是使用SelectAll()选择所有的单元格。你也可以使用方法SelectCol(col, addToSelected=False)和
SelectRow(row, addToSelected=False)来选择整列或整行。在这两个方法中,第一个参数是要选择的行或列的索引。如果参数addToSelected为True,所有另外被选择的单元格仍然处于被选状态,并且该行或列也被增加到已有的选择中。如果参数
addToSelected为False,那么所有另外被选择的单元格解除被选状态,而新的行或列代
替它们作为被选择对象。同样地,你也可以使用方法
SelectBlock(topRow, leftCol, bottomRow, rightCol, addToSelected=False)来增加一个对一块范围的选择,前面四个参数是所选的范围的对角,addToSelected
参数的作用同前一样。
你也可以使用IsVisible(row, col, wholeCellVisible=True)方法来得到一个特定的单元格在当前的显示中是否是可见的。如果该单元格当前显示在屏幕上了(相对于处在一个可滚动的容器的不可见部分而言),那么该方法返回True。如果参数wholeCellVisible为True,那么单元格要整个都是可见的,方法才返回True,如果参数wholeCellVisible为False,则单元格部分可见,方法就会返回True。方法MakeCellVisible(row, col)通过滚动确保了指定位置的单元格是可见的。
除了被选的单元格外,网格控件也有一个光标单元格,它代表获得当前用户焦点的单元格。你可以使用GetGridCursorCol()和GetGridCursorRow()方法来确定光标的当前位置,这两个方法返回整数的索引值。你可以使用SetGridCursor(row, col)方法来显式地放置一个光标。该方法除了移到光标外,它还隐式地对新的光标位置调用了
MakeCellVisible。
表14.3说明了在网格坐标和显示器坐标之间作转换的网格控件的方法。 表14.3 坐标转换方法
参数topLeft, bottomRight是单元格的坐标((row, col)元组的形式)。返回值是一个BlockToDeviceRect(topLeft, bottomRight) wx.Rect,wx.Rect使用给定的网格坐标所包围的矩形的设备像素坐标。 返回一个wx.Rect,wx.Rect的坐标是相对网格坐标(row, col)处的单元格的容器的坐标。 CellToRect(row, col) 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),该方法返回指定坐标处的单元格的描绘器实例。要为一个单元格设置描绘器,可以使用
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库python表格(4)在线全文阅读。
相关推荐: