2016-08-15 4 views
0

Я ищу способ редактировать данные навалом в сетке wxPython, немного как в Excel, когда вы выбираете диапазон, введите данные и нажмите shift- Войти. Это упрощенная версия моей сетки:wxpython grid: редактирование нескольких ячеек (ala Excel)

class MyGrid(gridlib.Grid): 
    def __init__(self, panel): 
     gridlib.Grid.__init__(self, panel) 
     self.Bind(gridlib.EVT_GRID_CELL_CHANGE, self.onEditCell) 
     self.Bind(gridlib.EVT_GRID_RANGE_SELECT, self.onSelection) 

    def onSelection(self, event): 
     if self.GetSelectionBlockTopLeft() == []: 
      self.selected_row_number = 0 
      self.selected_col_number = 0 
     else: 
      self.selected_row_number = self.GetSelectionBlockBottomRight()[0][0] - self.GetSelectionBlockTopLeft()[0][0] + 1 
      self.selected_col_number = self.GetSelectionBlockBottomRight()[0][1] - self.GetSelectionBlockTopLeft()[0][1] + 1 
     print self.selected_row_number, self.selected_col_number 

    def onEditCell(self,event): 
     print self.selected_row_number, self.selected_col_number 

Проблема, кажется, что событие onEditCell перезаписывает предыдущий выбор. Поэтому я могу выбрать, например. четыре на четыре блока в сетке, а onSelection будет печатать 4 4. Но когда я начну вводить текст и нажимаю Enter, onEditCell будет печатать 0,0, как если бы была выбрана только ячейка, которую я редактирую. Как я могу сохранить «память» о том, сколько ячеек выбрано? Спасибо,

ответ

0

Отвечая на мой собственный вопрос: я могу заставить его работать с некрасивым хака, который не кажется, как правильно делать вещи:

def onSelection(self, event): 
    self.previous_selected_row_number = self.selected_row_number 
    self.previous_selected_col_number = self.selected_col_number 
    if self.GetSelectionBlockTopLeft() == []: 
     self.selected_row_number = 0 
     self.selected_col_number = 0 
    else: 
     self.selected_row_number = self.GetSelectionBlockBottomRight()[0][0] - self.GetSelectionBlockTopLeft()[0][0] + 1 
     self.selected_col_number = self.GetSelectionBlockBottomRight()[0][1] - self.GetSelectionBlockTopLeft()[0][1] + 1 
    print self.selected_row_number, self.selected_col_number 
    print self.previous_selected_row_number, self.previous_selected_col_number 



def onEditCell(self,event): 
    print self.previous_selected_row_number, self.previous_selected_col_number 

Если кто-то может придумать лучшего способа ...

Смежные вопросы