Рубрики
Без рубрики

WXPYPHON: Изменение пользовательских рендерров для столбцов / строк

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: 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.