dragMoveEvent required that event.acceptProposedAction() is called in dragEnterEvent. So by using tabAt(pos) as you suggested, this work:
Thanks for the tip, I did not see this in the docs.. Sometimes the solutions are simpler than expected
#!/usr/bin/python3 import sys from PyQt5 import QtCore, QtGui, QtWidgets class TabBar(QtWidgets.QTabBar): def __init__(self, parent): super().__init__() self.setAcceptDrops(True) def dragEnterEvent(self, event): event.acceptProposedAction() QtWidgets.QTabBar.dragEnterEvent(self, event) def dragMoveEvent(self, event): pos = event.pos() index = self.tabAt(pos) self.setCurrentIndex(index) class TabWidget(QtWidgets.QTabWidget): def __init__(self, parent): super().__init__() tab1 = QtWidgets.QTreeWidget() self.setTabBar(TabBar(self)) self.addTab(tab1, "1st tab") self.addTab(QtWidgets.QTreeWidget(), "2nd tab") self.addTab(QtWidgets.QTreeWidget(), "3rd tab") item = QtWidgets.QTreeWidgetItem() item.setText(0, "drag me") tab1.addTopLevelItem(item) tab1.setDragDropMode(QtWidgets.QAbstractItemView.DragOnly) class Main(QtWidgets.QMainWindow): def __init__(self, parent): super().__init__() self.ui = QtWidgets.QWidget(self) self.ui.tab = TabWidget(self) self.ui.layout = QtWidgets.QVBoxLayout() self.ui.layout.addWidget(self.ui.tab) self.ui.setLayout(self.ui.layout) self.setCentralWidget(self.ui) self.show() if __name__== '__main__': app = QtWidgets.QApplication(sys.argv) gui = Main(app) sys.exit(app.exec_())
(Sep-01-2019, 06:08 PM)Axel_Erfurt Wrote: forget the last post. It's so easy setChangeCurrentOnDrag
Thanks for the tip, I did not see this in the docs.. Sometimes the solutions are simpler than expected