Gibt es eine Möglichkeit, die Bearbeitung bestimmter Zellen durch den Benutzer zu deaktivieren, wenn ListCtrl mit TextEditMixin verwendet wird?

Ich denke, es gibt eine Möglichkeit, dass Vetos das Bearbeitungsereignis, aber ich kann es nicht finden.

7
lolopop 9 Okt. 2012 im 22:53

3 Antworten

Beste Antwort

Ereignis wx.EVT_LIST_BEGIN_LABEL_EDIT:

class EditableListCtrl(wx.ListCtrl, listmix.TextEditMixin):
    def __init__(self, parent, ID=wx.ID_ANY, pos=wx.DefaultPosition,
                 size=wx.DefaultSize, style=0):
        wx.ListCtrl.__init__(self, parent, ID, pos, size, style)
        listmix.TextEditMixin.__init__(self)
        self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginLabelEdit)

    def OnBeginLabelEdit(self, event):
        if event.m_col == 1:
            event.Veto()
        else:
            event.Skip()
10
ErwinP 9 Okt. 2012 im 20:19

In wxPython Version 4.0.0 lautet die Zeile:

if event.m_col == 1 funktioniert nicht. Verwenden

if event.GetColumn() == 1

Stattdessen.

1
Jonas 2 Aug. 2017 im 08:26

Soweit ich mich erinnere, müssen Sie an EVT_LIST_BEGIN_LABEL_EDIT binden. Dann überprüfen Sie in Ihrem Event-Handler einfach, in welcher Spalte Sie sich befinden. Wenn Sie sich in einer Spalte befinden, die bearbeitet werden soll, führen Sie "event.Allow ()" aus, andernfalls legen Sie ein Veto ein.

1
Mike Driscoll 9 Okt. 2012 im 20:19