def mouseMoveEvent(self, event): # update tooltip with the tooltip of the tab under mouse cursor. tab = self.widget_under_mouse(event) if tab is not None: tooltip = tab.toolTip() if not tooltip: try: tooltip = tab.file.path except AttributeError: pass self.setToolTip(tooltip) # If the distance is too small then return if (event.pos() - self._pos).manhattanLength() < \ QtWidgets.QApplication.startDragDistance(): return # If the left button isn't pressed anymore then return if not event.buttons() & QtCore.Qt.LeftButton: return drag = QtGui.QDrag(self) data = QtCore.QMimeData() data.tab = tab data.widget = self # a crude way to distinguish tab-reodering drags from other drags data.setData("action", b"tab-reordering") drag.setMimeData(data) drag.setPixmap(self.tabIcon(self.tabAt(event.pos())).pixmap(32, 32)) drag.exec_()