wxPython官方文档中文翻译 - 网格概述

176 阅读4分钟

官方文档:docs.wxpython.org/grid_overvi…

Grid及其相关类用于显示和编辑表格数据。

Grid支持对表格单元格设置自定义属性,这使得能够完全自定义其外观,并且它使用一个独立的网格表格(派生自GridTableBase的类)来进行数据管理,这意味着它可用于显示任意数量的数据。

起步

对于简单的应用程序,你只需在代码中引用Grid类即可。下面这个示例展示了如何在框架或对话框的构造函数中创建一个网格,并演示了一些格式化函数:

import wx
import wx.grid

class GridFrame(wx.Frame):
    def __init__(self, parent):
        wx.Frame.__init__(self, parent)

        # 创建一个wxGrid对象
        grid = wx.grid.Grid(self, -1)

        # 然后我们调用 CreateGrid 来设置网格的维度
        #(在这个示例中是 100 行和 10 列) 
        grid.CreateGrid(100, 10)

        # 我们可以以像素为单位设置
        # 各个行和列的大小
        grid.SetRowSize(0, 60)
        grid.SetColSize(0, 120)

        # 并将网格单元格的内容设置为字符串
        grid.SetCellValue(0, 0, 'wxGrid is good')

        # 我们可以指定某些单元格为只读。
        grid.SetCellValue(0, 3, 'This is read.only')
        grid.SetReadOnly(0, 3)

        # 可以为网格单元格的内容指定颜色
        grid.SetCellValue(3, 3, 'green on grey')
        grid.SetCellTextColour(3, 3, wx.GREEN)
        grid.SetCellBackgroundColour(3, 3, wx.LIGHT_GREY)

        # 我们可以指定某些单元格存储数值而非字符串。
        # 这里,我们将网格的第5列设置为存储浮点数值,
        # 显示宽度为6个字符,
        # 精度为2位小数
        grid.SetColFormatFloat(5, 6, 2)
        grid.SetCellValue(0, 6, '3.1415')

        self.Show()


if __name__ == '__main__':

    app = wx.App(0)
    frame = GridFrame(None)
    app.MainLoop()

以下是与Grid相关的类的列表:

  • Grid:主要的网格控件类本身。
  • GridTableBase:网格数据提供器的基类。
  • GridStringTable:简单的GridTableBase实现类,仅支持字符串数据项,并将所有数据存储在内存中(因此仅适用于不太大的网格)。
  • GridCellAttr:一种单元格属性,允许自定义其外观,以及用于显示和编辑该单元格的渲染器和编辑器。
  • GridCellAttrProvider:负责存储和检索单元格属性的对象。
  • GridColLabelWindow:显示网格列标签的窗口。
  • GridRowLabelWindow:显示网格行标签的窗口。
  • GridCornerLabelWindow:用于网格左上角的窗口。
  • GridWindow:代表网格主要部分的窗口。
  • GridCellRenderer:用于显示单元格值的对象的基类。
  • GridCellStringRenderer:将单元格显示为文本字符串的渲染器。
  • GridCellNumberRenderer:将单元格显示为整数的渲染器。
  • GridCellFloatRenderer:将单元格显示为浮点数的渲染器。
  • GridCellBoolRenderer:将单元格显示为已勾选或未勾选复选框的渲染器。
  • GridCellEditor:用于编辑单元格值的对象的基类。
  • GridCellStringEditor:用于包含文本字符串的单元格的编辑器。
  • GridCellNumberEditor:用于包含整数的单元格的编辑器。
  • GridCellFloatEditor:用于包含浮点数的单元格的编辑器。
  • GridCellBoolEditor:用于布尔值单元格的编辑器。
  • GridCellChoiceEditor:允许从预定义字符串中选择一个(并且可能输入新字符串)的编辑器。
  • GridEvent:由大多数网格操作发送的事件。
  • GridSizeEvent:当网格的列或行被调整大小时发送的特殊事件。
  • GridRangeSelectEvent:当在网格中选择了一个单元格区域时发送的特殊事件。
  • GridEditorCreatedEvent:当创建一个单元格编辑器时发送的特殊事件。
  • GridSelection:有效地表示网格选择情况的对象。
  • GridTypeRegistry:包含有关网格所支持的数据类型的信息。

列和行的大小

注意:本节将仅讨论Grid行的大小调整,以避免重复,但其中的所有内容同样适用于网格列,只需将方法名称中的“Row”替换为“Col”即可。最初,所有Grid行的高度都相同,可以使用SetDefaultRowSize一次性修改所有行的高度。然而,与wx.ListBoxwx.ListCtrl等较为简单的控件不同,Grid还允许使用SetRowSize单独调整行的大小,使其具有各自的高度(作为一种特殊情况,可以通过将行的大小设置为0来完全隐藏该行,这可通过辅助方法HideRow来实现)。也可以使用AutoSizeRow调整行的大小以适应其内容,或者使用AutoSizeRows一次性为所有行进行调整。此外,默认情况下,用户还可以拖动行分隔线以交互方式调整行的大小。可以通过调用DisableDragRowSize完全禁止这种操作,或者使用DisableRowResize仅禁止对个别行进行调整。如果你确实允许用户调整网格行的大小,那么保存行的高度并在下次重新创建网格时(可能是在下一次程序执行期间)恢复这些高度可能是个不错的主意:GetRowSizesSetRowSizes函数可以在这方面提供帮助,你只需以某种方式序列化前者返回的GridSizesInfo结构,并在调用后者之前将其反序列化回来即可。