code: def _start_drag_row(self, event):
          
          self._dragged_row = self.identify_row(event.y)  # identify dragged row
          bbox = self.bbox(self._dragged_row)
          self._dy = bbox[1] - event.y  # distance between cursor and row upper border
          self._dragged_row_y = bbox[1]  # y coordinate of dragged row upper border
          self._dragged_row_height = bbox[3]
          # configure dragged row preview
          self._visual_drag.configure(displaycolumns=self['displaycolumns'],
                                      height=1)
          for col in self['columns']:
              self._visual_drag.column(col, width=self.column(col, 'width'))
          if 'tree' in tuple(str(p) for p in self['show']):
              self._visual_drag.configure(show='tree')
          else:
              self._visual_drag.configure(show='')
          self._visual_drag.place(in_=self, x=0, y=bbox[1],
                                  height=self._visual_drag.winfo_reqheight() + 2,
                                  anchor='nw', relwidth=1)
          self._visual_drag.selection_add(self._dragged_row)
          self.selection_remove(self._dragged_row)
          self._visual_drag.update_idletasks()
          self._visual_drag.see(self._dragged_row)
          self._visual_drag.update_idletasks()
          self._visual_drag.xview_moveto(self.xview()[0])
docs: Start dragging a row