Автор оригинала: Mike Driscoll.
WXPYPHON GUI Toolkit имеет очень богатый виджет сетки, который я написал ранее в этом блоге. Это позволяет создавать листы ячеек, аналогичных тем, которые в Microsoft Excel.
Существует также аккуратный микс, который позволяет вам применить пользовательский рендерер к меткам на столбцах и рядах сетки.
Давайте посмотрим на это и посмотрим, как это работает:
import wx import wx.grid as grid import wx.lib.mixins.gridlabelrenderer as glr class MyGrid(grid.Grid, glr.GridWithLabelRenderersMixin): def __init__(self, *args, **kw): grid.Grid.__init__(self, *args, **kw) glr.GridWithLabelRenderersMixin.__init__(self) class MyColLabelRenderer(glr.GridLabelRenderer): def __init__(self, bgcolor): self._bgcolor = bgcolor def Draw(self, grid, dc, rect, col): dc.SetBrush(wx.Brush(self._bgcolor)) dc.SetPen(wx.TRANSPARENT_PEN) dc.DrawRectangle(rect) hAlign, vAlign = grid.GetColLabelAlignment() text = grid.GetColLabelValue(col) self.DrawBorder(grid, dc, rect) self.DrawText(grid, dc, rect, text, hAlign, vAlign) class MyPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent) grid = MyGrid(self, size=(100, 100)) grid.CreateGrid(numRows=10, numCols=10) for col in range(0, 10, 3): grid.SetColLabelRenderer( col+0, MyColLabelRenderer('#e0ffe0')) grid.SetColLabelRenderer( col+1, MyColLabelRenderer('#e0e0ff')) grid.SetColLabelRenderer( col+2, MyColLabelRenderer('#ffe0e0')) main_sizer = wx.BoxSizer(wx.VERTICAL) main_sizer.Add(grid, 1, wx.EXPAND) self.SetSizer(main_sizer) class MyFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, title='Custom Grid Renderers') panel = MyPanel(self) self.Show() if __name__ == '__main__': app = wx.App(False) frame = MyFrame() app.MainLoop(
Давайте немного сломаемся. Вы заметите в верхней части кода, который нам нужно импортировать Сетка Виджет отдельно в wxpython. Нам также нужно импортировать микс под названием GridwithLabelRenderersmixin Отказ Мы подклассьте класс сетки и добавьте в смесин, а затем инициализируйте оба.
Далее мы создаем подкласс Gridlabelrenderer , который также из мистина. Это позволяет нам создать интервал Рисовать Метод, который даст нам возможность применять разные цвета или шрифты на этикетки в нашей сетке. В этом случае я только что сделал это, чтобы мы могли изменить цвет текста в этикетках.
Последний кусок кода, который мы заинтересованы в том, в MyPanel Класс, где мы фактически создали сетку и измените цвет фона меток в колоннах. Вот что заканчивалась сетка:
Обертывание
Toolkit WXPYPHON имеет десятки предварительно созданных виджетов, которые вы можете использовать для создания межплатформельных пользовательских интерфейсов. Демо WXPYPHON имеет гораздо больше вовлеченного примера, чем эта статья, которая может также найти интересную. Если вы не дали WxPython, попробуйте, вы действительно должны пойти получить его. Это PIP устанавливается из Pypi и совместим с Python 3.