2012-10-09 695 views

Trả lời

10

Event 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

Như tôi nhớ lại, bạn phải liên kết với EVT_LIST_BEGIN_LABEL_EDIT. Sau đó, trong trình xử lý sự kiện của bạn, bạn chỉ cần kiểm tra cột nào bạn đang ở và nếu bạn đang ở trong cột mà bạn muốn chỉnh sửa, thì bạn thực hiện "event.Allow()", nếu không bạn sẽ phủ quyết.

+0

Sự khác nhau giữa 'evt.Veto()' và 'evt.Allow()' là gì? – lolopop

+0

uh, Veto dừng sự kiện này khi đi lên chuỗi sự kiện trong khi Cho phép tiếp tục. Bây giờ, một câu hỏi hay hơn là sự khác nhau giữa Allow và Skip là gì? Điều đó tôi không chắc chắn về ... –

+0

Oh lỗi của tôi đó là những gì tôi muốn hỏi :) từ http://xoomer.virgilio.it/infinity77/Phoenix/ 'Allow' là" Điều này trái ngược với Veto: nó rõ ràng cho phép sự kiện được xử lý. " và 'Skip' là" Phương thức này có thể được sử dụng bên trong một trình xử lý sự kiện để kiểm soát xem các trình xử lý sự kiện có liên quan đến sự kiện này sẽ được gọi sau khi trình xử lý hiện tại trả về hay không. " Con của NotifyEvent ... – lolopop

1

Trong phiên bản wxPython 4.0.0 dòng:

if event.m_col == 1 không hoạt động. Sử dụng

if event.GetColumn() == 1

thay thế.