wxWidgets/wxPython/samples/wxPIA_book/Chapter-14/grid_renderer.py

60 lines
1.7 KiB
Python
Raw Normal View History

import wx
import wx.grid
import random
class RandomBackgroundRenderer(wx.grid.PyGridCellRenderer):
def __init__(self):
wx.grid.PyGridCellRenderer.__init__(self)
def Draw(self, grid, attr, dc, rect, row, col, isSelected):
text = grid.GetCellValue(row, col)
hAlign, vAlign = attr.GetAlignment()
dc.SetFont( attr.GetFont() )
if isSelected:
bg = grid.GetSelectionBackground()
fg = grid.GetSelectionForeground()
else:
bg = random.choice(["pink", "sky blue", "cyan", "yellow", "plum"])
fg = attr.GetTextColour()
dc.SetTextBackground(bg)
dc.SetTextForeground(fg)
dc.SetBrush(wx.Brush(bg, wx.SOLID))
dc.SetPen(wx.TRANSPARENT_PEN)
dc.DrawRectangleRect(rect)
grid.DrawTextRectangle(dc, text, rect, hAlign, vAlign)
def GetBestSize(self, grid, attr, dc, row, col):
text = grid.GetCellValue(row, col)
dc.SetFont(attr.GetFont())
w, h = dc.GetTextExtent(text)
return wx.Size(w, h)
def Clone(self):
return RandomBackgroundRenderer()
class TestFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Grid Renderer",
size=(640,480))
grid = wx.grid.Grid(self)
grid.CreateGrid(50,50)
# Set this custom renderer just for row 4
attr = wx.grid.GridCellAttr()
attr.SetRenderer(RandomBackgroundRenderer())
grid.SetRowAttr(4, attr)
for row in range(10):
for col in range(10):
grid.SetCellValue(row, col,
"cell (%d,%d)" % (row, col))
app = wx.PySimpleApp()
frame = TestFrame()
frame.Show()
app.MainLoop()