.. include:: headings.inc .. _grid overview: ================================================= |phoenix_title| **Grid Overview** ================================================= :class:`~wx.grid.Grid` and its related classes are used for displaying and editing tabular data. :class:`~wx.grid.Grid` supports custom attributes for the table cells, allowing to completely customize its appearance and uses a separate grid table (:class:`~wx.grid.GridTableBase` -derived) class for the data management meaning that it can be used to display arbitrary amounts of data. .. _grid getting started: Getting Started --------------- For simple applications you need only refer to the :class:`~wx.grid.Grid` class in your code. This example shows how you might create a grid in a frame or dialog constructor and illustrates some of the formatting functions:: import wx import wx.grid class GridFrame(wx.Frame): def __init__(self, parent): wx.Frame.__init__(self, parent) # Create a wxGrid object grid = wx.grid.Grid(self, -1) # Then we call CreateGrid to set the dimensions of the grid # (100 rows and 10 columns in this example) grid.CreateGrid(100, 10) # We can set the sizes of individual rows and columns # in pixels grid.SetRowSize(0, 60) grid.SetColSize(0, 120) # And set grid cell contents as strings grid.SetCellValue(0, 0, 'wxGrid is good') # We can specify that some cells are read.only grid.SetCellValue(0, 3, 'This is read.only') grid.SetReadOnly(0, 3) # Colours can be specified for grid cell contents grid.SetCellValue(3, 3, 'green on grey') grid.SetCellTextColour(3, 3, wx.GREEN) grid.SetCellBackgroundColour(3, 3, wx.LIGHT_GREY) # We can specify the some cells will store numeric # values rather than strings. Here we set grid column 5 # to hold floating point values displayed with width of 6 # and precision of 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() Here is a list of classes related to :class:`~wx.grid.Grid`: - :class:`~wx.grid.Grid`: The main grid control class itself. - :class:`~wx.grid.GridTableBase`: The base class for grid data provider. - :class:`~wx.grid.GridStringTable`: Simple :class:`~wx.grid.GridTableBase` implementation supporting only string data items and storing them all in memory (hence suitable for not too large grids only). - :class:`~wx.grid.GridCellAttr`: A cell attribute, allowing to customize its appearance as well as the renderer and editor used for displaying and editing it. - :class:`~wx.grid.GridCellAttrProvider`: The object responsible for storing and retrieving the cell attributes. - :class:`~wx.grid.GridColLabelWindow`: The window showing the grid columns labels. - :class:`~wx.grid.GridRowLabelWindow`: The window showing the grid rows labels. - :class:`~wx.grid.GridCornerLabelWindow`: The window used in the upper left grid corner. - :class:`~wx.grid.GridWindow`: The window representing the main part of the grid. - :class:`~wx.grid.GridCellRenderer`: Base class for objects used to display a cell value. - :class:`~wx.grid.GridCellStringRenderer`: Renderer showing the cell as a text string. - :class:`~wx.grid.GridCellNumberRenderer`: Renderer showing the cell as an integer number. - :class:`~wx.grid.GridCellFloatRenderer`: Renderer showing the cell as a floating point number. - :class:`~wx.grid.GridCellBoolRenderer`: Renderer showing the cell as checked or unchecked box. - :class:`~wx.grid.GridCellEditor`: Base class for objects used to edit the cell value. - :class:`~wx.grid.GridCellStringEditor`: Editor for cells containing text strings. - :class:`~wx.grid.GridCellNumberEditor`: Editor for cells containing integer numbers. - :class:`~wx.grid.GridCellFloatEditor`: Editor for cells containing floating point numbers. - :class:`~wx.grid.GridCellBoolEditor`: Editor for boolean-valued cells. - :class:`~wx.grid.GridCellChoiceEditor`: Editor allowing to choose one of the predefined strings (and possibly enter new one). - :class:`~wx.grid.GridEvent`: The event sent by most of :class:`~wx.grid.Grid` actions. - :class:`~wx.grid.GridSizeEvent`: The special event sent when a grid column or row is resized. - :class:`~wx.grid.GridRangeSelectEvent`: The special event sent when a range of cells is selected in the grid. - :class:`~wx.grid.GridEditorCreatedEvent`: The special event sent when a cell editor is created. - :class:`~wx.grid.GridSelection`: The object efficiently representing the grid selection. - :class:`~wx.grid.GridTypeRegistry`: Contains information about the data types supported by the grid. .. _grid column and row sizes: Column and Row Sizes -------------------- .. note:: This section will discuss the resizing of :class:`~wx.grid.Grid` rows only to avoid repetitions but everything in it also applies to grid columns, just replace Row in the method names with Col. Initially all :class:`~wx.grid.Grid` rows have the same height, which can be modified for all of them at once using :meth:`~wx.grid.Grid.SetDefaultRowSize`. However, unlike simpler controls such as :class:`wx.ListBox` or :class:`wx.ListCtrl`, :class:`~wx.grid.Grid` also allows its rows to be individually resized to have their own height using :meth:`~wx.grid.Grid.SetRowSize` (as a special case, a row may be hidden entirely by setting its size to 0, which is done by a helper :meth:`~wx.grid.Grid.HideRow` method). It is also possible to resize a row to fit its contents with :meth:`~wx.grid.Grid.AutoSizeRow` or do it for all rows at once with :meth:`~wx.grid.Grid.AutoSizeRows`. Additionally, by default the user can also drag the row separator lines to resize the rows interactively. This can be forbidden completely by calling :meth:`~wx.grid.Grid.DisableDragRowSize` or just for the individual rows using :meth:`~wx.grid.Grid.DisableRowResize`. If you do allow the user to resize the grid rows, it may be a good idea to save their heights and restore it when the grid is recreated the next time (possibly during a next program execution): the functions :meth:`~wx.grid.Grid.GetRowSizes` and :meth:`~wx.grid.Grid.SetRowSizes` can help with this, you will just need to serialize :class:`~wx.grid.GridSizesInfo` structure returned by the former in some way and deserialize it back before calling the latter.