2014-12-17 1 views
0

wxpython 2.7.8의 wx.DataViewCtrl을 사용하여 데이터를 나열하고 있습니다. wx.DataViewCtrl : GetSelections()를 사용하여 목록에서 선택한 항목을 처음 클릭 할 수 있습니다. 닫기 버튼을 클릭하여 상자를 닫은 후에 다시 메뉴를 클릭하여이 상자를 열려고합니다. 하지만 wx.DataViewCtrl : GetSelections()를 사용하여 삭제/수정하도록 선택한 항목을 가져 오지 못했습니다. wx.DataViewCtrl : GetSelections()는 빈 목록을 반환합니다. 그러나 여전히 데이터 목록을 표시하는 wx.DataViewCtrl 상자.wx.DataViewCtrl에서 선택한 항목을 가져올 수 없습니다.

도와주세요. 지난 이틀 동안이 문제에 시달렸습니다. 미리 감사드립니다.

class MainFrame(wx.Dialog): 

def __init__(self, parent, title, data): 

    self.data = data 
    wx.Dialog.__init__(self, parent, title=title, size=(800, 400)) 
    self.panel = wx.Panel(self)  
    self.model = UpdateModel(self.data) 



def createEntityTable(self, editor_ctrl): 
    self.__editor_ctrl = editor_ctrl.getEditor()  
    self.dvc = dv.DataViewCtrl(self.panel, 
           style=wx.BORDER_THEME 
           | dv.DV_ROW_LINES # nice alternating bg colors 
           #| dv.DV_HORIZ_RULES 
           | dv.DV_VERT_RULES 
           | dv.DV_MULTIPLE, size = (600, 400) 
           ) 
    self.dvc.AssociateModel(self.model) 

    self.dvc.AppendTextColumn("Name", 0, width=170, mode=dv.DATAVIEW_CELL_EDITABLE) 
    self.dvc.AppendTextColumn("DTD", 1, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) 
    self.dvc.AppendTextColumn("File name", 2, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) 
    self.dvc.AppendTextColumn("Public Id", 3, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) 
    self.dvc.AppendTextColumn("Notation", 4, width=80, mode=dv.DATAVIEW_CELL_EDITABLE) 

    for c in self.dvc.Columns: 
     c.Sortable = True 
     c.Reorderable = True 

    self.new = wx.Button(self.panel, -1, "New") 
    self.Bind(wx.EVT_BUTTON, self.OnAddRow, self.new) 

    self.modify = wx.Button(self.panel, -1, "Modify") 
    self.Bind(wx.EVT_BUTTON, self.onModifyRow, self.modify) 

    self.delete = wx.Button(self.panel, -1, "Delete") 
    self.Bind(wx.EVT_BUTTON, self.OnDeleteRows, self.delete) 

    self.close = wx.Button(self.panel, -1, "Close") 
    self.Bind(wx.EVT_BUTTON, self.OnClosePanel, self.close) 

    dvcSizer = wx.BoxSizer(wx.HORIZONTAL) 
    dvcSizer.Add(self.dvc, 1, wx.EXPAND)  

    btnbox = wx.BoxSizer(wx.VERTICAL) 

    btnbox.Add(self.new, 0, wx.LEFT|wx.RIGHT, 5) 
    btnbox.Add(self.modify, 0, wx.LEFT|wx.RIGHT, 5) 
    btnbox.Add(self.delete, 0, wx.LEFT|wx.RIGHT, 5) 
    btnbox.Add(self.close, 0, wx.LEFT|wx.RIGHT, 5) 
    dvcSizer.Add(btnbox, 0, wx.TOP|wx.BOTTOM, 5) 

    self.panel.SetSizer(dvcSizer) 
    self.ShowModal() 


def OnDeleteRows(self, evt): 
    items = self.dvc.GetSelections() 
    rows = [self.model.GetRow(item) for item in items] 
    self.model.DeleteRows(rows) 

답변

0

wxPython Demo에서 DVC_IndexListModel을 사용한 것으로 보입니다. PyDataViewIndexListModel에서 파생 된 TestModel에 표시된대로 DeleteRows(self, rows) 메서드를 구현 했습니까? 이것은 UpdateModel입니다.

BTW, 2.7.8은 (C) Python 버전이어야합니다. wxPython 버전이 2.9 이상인 것으로 가정합니다.

관련 문제