code: def onDragSelection(self, event):
          
          if self.grid.GetSelectionBlockTopLeft():
              #top_left = self.grid.GetSelectionBlockTopLeft()
              #bottom_right = self.grid.GetSelectionBlockBottomRight()
              # awkward hack to fix wxPhoenix memory problem, (Github issue #221)
              bottom_right = eval(repr(self.grid.GetSelectionBlockBottomRight()).replace("GridCellCoordsArray: ", "").replace("GridCellCoords", ""))
              top_left = eval(repr(self.grid.GetSelectionBlockTopLeft()).replace("GridCellCoordsArray: ", "").replace("GridCellCoords", ""))
              #
              top_left = top_left[0]
              bottom_right = bottom_right[0]
          else:
              return
          # GetSelectionBlock returns (row, col)
          min_col = top_left[1]
          max_col = bottom_right[1]
          min_row = top_left[0]
          max_row = bottom_right[0]
          self.df_slice = self.contribution.tables[self.grid_type].df.iloc[min_row:max_row+1, min_col:max_col+1]
docs: Set self.df_slice based on user's selection