2012-10-09 26 views
6

TextEditMixin के साथ ListCtrl का उपयोग करते समय उपयोगकर्ता द्वारा विशिष्ट कक्षों के संपादन को अक्षम करने का कोई तरीका है?wx.ListCtrl TextEditMixin के साथ - चयनित कक्षों का संपादन अक्षम करें

मुझे लगता है कि कुछ ऐसा तरीका है जो संपादन कार्यक्रम Vetos, हालांकि मुझे यह नहीं मिल रहा है।

उत्तर

10

घटना 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() 
1

मुझे याद है के रूप में, आप EVT_LIST_BEGIN_LABEL_EDIT करने के लिए बाध्य किया है। फिर अपने ईवेंट हैंडलर में आप बस जांचें कि आप किस कॉलम में हैं और यदि आप एक कॉलम में हैं जिसे आप संपादन योग्य बनाना चाहते हैं, तो आप "ईवेंट। अनुमति दें()", अन्यथा आप veto करते हैं।

if event.m_col == 1 काम नहीं करता:

+0

'evt.Veto()' और 'evt.Allow()' के बीच क्या अंतर है? – lolopop

+0

ओह, वीटो घटना को घटना श्रृंखला में जाने से रोकता है जबकि अनुमति दें कि इसे जारी रखा जाए। अब, एक बेहतर सवाल यह है कि अनुमति और छोड़ने के बीच क्या अंतर है? मुझे यकीन नहीं है कि ... –

+0

ओह मेरी गलती मैं यही पूछना चाहता हूं :) http://xoomer.virgilio.it/infinity77/Phoenix/ 'अनुमति दें' है "यह वीटो के विपरीत है: यह स्पष्ट रूप से घटना को संसाधित करने की अनुमति देता है। " और 'छोड़ें' है "इस विधि का उपयोग किसी ईवेंट हैंडलर के अंदर किया जा सकता है ताकि यह नियंत्रित किया जा सके कि इस घटना से जुड़ी आगे के ईवेंट हैंडलर को वर्तमान रिटर्न के बाद बुलाया जाएगा।", यह एक अंतर की तरह प्रतीत नहीं होता है सिवाय इसके कि अनुमति केवल उपलब्ध है NotifyEvent के बच्चे ... – lolopop

1

wxPython संस्करण में लाइन 4.0.0।

if event.GetColumn() == 1

बजाय का उपयोग करें।