Bottom Page

Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
 [WxPython] Grid. How to close the cell editor?
#1
How to implement closing your own cell editor when it loses focus? Since the built-in wx editors work.

Now my editor closes only if you select another cell in the grid.

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import wx
import wx.grid


class GridCellColourEditor(wx.grid.GridCellEditor):

    def __init__(self):
        super().__init__()

    def Create(self, parent, id, evtHandler):
        self._cp = wx.ColourPickerCtrl(parent, id)
        self.SetControl(self._cp)

        if evtHandler:
            self._cp.PushEventHandler(evtHandler)

    def BeginEdit(self, row, col, grid):
        self.startValue = grid.GetTable().GetValue(row, col)
        self._cp.SetColour(self.startValue)
        self._cp.SetFocus()

    def EndEdit(self, row, col, grid, oldval):
        val = self._cp.GetColour().GetAsString(wx.C2S_HTML_SYNTAX)
        if val != oldval:
            return val
        else:
            return None

    def ApplyEdit(self, row, col, grid):
        val = self._cp.GetColour().GetAsString(wx.C2S_HTML_SYNTAX)
        grid.GetTable().SetValue(row, col, val)

    def Reset(self):
        self._cp.SetColour(self.startValue)

    def Clone(self):
        return GridCellColourEditor()

class GridCellColourRenderer(wx.grid.GridCellRenderer):

    def __init__(self):
        super().__init__()

    def Draw(self, grid, attr, dc, rect, row, col, isSelected):
        if grid.IsEnabled():
            bgColour = grid.GetDefaultCellBackgroundColour()
        else:
            bgColour = grid.GetBackgroundColour()

        dc.SetBrush(wx.Brush(bgColour, wx.SOLID))
        dc.SetPen(wx.TRANSPARENT_PEN)
        dc.DrawRectangle(rect)

        colour = grid.GetTable().GetValue(row, col)

        x = rect.x + 3
        y = rect.y + 3
        width = rect.width - 6
        height = rect.height - 6

        dc.SetBrush(wx.Brush(colour, wx.SOLID))
        dc.SetPen(wx.Pen(wx.BLACK))
        dc.DrawRoundedRectangle(x, y, width, height, 3)

    def GetBestSize(self, grid, attr, dc, row, col):
        return attr.GetSize()

    def Clone(self):
        return GridCellColourRenderer()

class Frame(wx.Frame):

    def __init__(self):
        super().__init__(None)

        vbox = wx.BoxSizer(wx.VERTICAL)

        self.grid = wx.grid.Grid(self, size=(100, 50))
        vbox.Add(self.grid, flag=wx.EXPAND)
        self.grid.CreateGrid(1, 2)

        self.grid.SetCellEditor(0, 0, GridCellColourEditor())
        self.grid.SetCellRenderer(0, 0, GridCellColourRenderer())

        self.grid.SetCellEditor(0, 1, wx.grid.GridCellTextEditor())
        self.grid.SetCellRenderer(0, 1, wx.grid.GridCellStringRenderer())

        btn = wx.Button(self, -1, 'For kill focus')
        vbox.Add(btn, 0, wx.ALL, 10)

        self.SetSizer(vbox)

app = wx.App()
frame = Frame()
frame.Show()
app.MainLoop()
Why, if wx.TextCtrl is used as wx.Control, then the cell editor successfully closes when focus is lost. And if I use wx.ColourPickerCtrl, the editor does not close?
Quote

Top Page

Messages In This Thread
Grid. How to close the cell editor? - by ioprst - Dec-02-2019, 07:42 AM
RE: Grid. How to close the cell editor? - by ioprst - Dec-03-2019, 09:28 AM

Possibly Related Threads...
Thread Author Replies Views Last Post
  [WxPython] Why does an error occur after editing a grid cell? ioprst 2 159 Nov-12-2019, 12:31 PM
Last Post: Larz60+
  Get value of wx grid cell ian 1 3,767 Jul-15-2017, 03:04 AM
Last Post: Larz60+

Forum Jump:


Users browsing this thread: 1 Guest(s)