Hi. Plest help me in this problem. In treeWidget I reimplement startDrag, dragMove and dragEnter. Result: drag indicator and dragPixmap disappeared. Drag from another widget or internal drag - does not matter. How to reimplement the procedure correctly to make drop indicator and drag pixmap work? setDropIndicatorShown(True) not work! In the example: Select "item0" in treeWidget, drag elements from listWidget to treeWidget. LeftMouse press and drag = select, MiddleMouse = Drag. This code is functional. You can run and test. Thanks!!!
from PyQt4.QtCore import * from PyQt4.QtGui import * #LIST WIDGET class listWidgetClass(QListWidget): def __init__(self, parent = None): QListWidget.__init__(self) self.parent = parent self.setSelectionMode(QAbstractItemView.ExtendedSelection) #####This command does not work self.setDropIndicatorShown(True) ##### self.setDragEnabled(True) def mousePressEvent(self, event): if event.button() == 4: self.setDragDropMode(QAbstractItemView.DragOnly) else: self.setDragDropMode(QAbstractItemView.NoDragDrop) QListWidget.mousePressEvent(self, event) def startDrag(self, event): item = self.selectedItems() objects = [] if item: for i in item: objects.append(str(i.text())) data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream.writeQString(';'.join(objects)) mimeData = QMimeData() mimeData.setData('application/x-dropWidget', data) drag = QDrag(self) drag.setMimeData(mimeData) drag.exec_() #TREE WIDGET class treeWidgetClass(QTreeWidget): def __init__(self, parent = None): QTreeWidget.__init__(self) self.parent = parent self.setSelectionMode(QAbstractItemView.ExtendedSelection) self.setDragDropMode(QAbstractItemView.InternalMove) self.setAcceptDrops(True) self.setDragEnabled(True) self.header().setVisible(False) self.setDropIndicatorShown(True) self.setColumnCount(1) def addItems(self, objs, dropItem): if objs: sourceItem = self.currentItem() sourceData = str(sourceItem.data(0,Qt.UserRole).toString()).split(';') targetData = str(dropItem.data(0,Qt.UserRole).toString()) if targetData: targetData = targetData.split(';') else: targetData = [] dropData = objs.split(';') dropItem.setData(0,Qt.UserRole,';'.join(targetData+dropData)) newSourceData = [] for s in sourceData: if not s in dropData: newSourceData.append(s) sourceItem.setData(0,Qt.UserRole,';'.join(newSourceData)) ####################### it is an important part of the code ###################### def dragEnterEvent(self, event): if event.mimeData().hasFormat('application/x-dropWidget'): event.accept() else: event.ignore() def dragMoveEvent(self, event): if event.mimeData().hasFormat('application/x-dropWidget'): event.accept() else: event.ignore() ############################################################################# def dropEvent(self, event): QTreeWidget.dropEvent(self, event) if event.mimeData().hasFormat('application/x-dropWidget'): event.accept() data = event.mimeData().data('application/x-dropWidget') stream = QDataStream(data, QIODevice.ReadOnly) text = str(stream.readQString()) if text: item = self.itemAt(event.pos()) self.addItems(text, item) self.parent.updateList() def startDrag(self, dropActions): data = QByteArray() stream = QDataStream(data, QIODevice.WriteOnly) stream.writeQString('') mimeData = QMimeData() mimeData.setData('application/x-dropWidget', data) drag = QDrag(self) drag.setMimeData(mimeData) drag.exec_() def mousePressEvent(self,event): if event.button() == 1: self.setDragDropMode(QAbstractItemView.DropOnly) QTreeWidget.mousePressEvent(self, event) elif event.button() == 4: self.setDragDropMode(QAbstractItemView.InternalMove) QTreeWidget.mousePressEvent(self, event) def mouseReleaseEvent(self, event): self.setDragDropMode(QAbstractItemView.InternalMove) QTreeWidget.mouseReleaseEvent(self, event) #MAIN WIDGET class dropWidget(QMainWindow): def __init__(self, parent = None): QMainWindow.__init__(self) self.resize(516, 282) self.centralwidget = QWidget(self) self.horizontalLayout = QHBoxLayout(self.centralwidget) self.treeWidget = treeWidgetClass(self) self.horizontalLayout.addWidget(self.treeWidget) self.listWidget = listWidgetClass(self) self.horizontalLayout.addWidget(self.listWidget) self.setCentralWidget(self.centralwidget) self.treeWidget.itemClicked.connect(self.updateList) self.initObjects() def updateList(self): data = self.treeWidget.currentItem().data(0,Qt.UserRole).toString() self.listWidget.clear() if data: for d in data.split(';'): item = QListWidgetItem(self.listWidget) item.setText(d) self.listWidget.addItem(item) def initObjects(self): for i in range(4): item = QTreeWidgetItem(self.treeWidget) item.setText(0,'Item '+str(i)) self.treeWidget.addTopLevelItem(item) strings = [] for i in range(10):strings.append('listItem'+str(i)) data = ';'.join(strings) self.treeWidget.topLevelItem(0).setData( 0, Qt.UserRole, QVariant(data) ) if __name__ == "__main__": app = QApplication([]) win = dropWidget() win.show() app.exec_() -- You received this message because you are subscribed to the Google Groups "Python Programming for Autodesk Maya" group. To post to this group, send email to python_inside_maya@googlegroups.com. To unsubscribe from this group, send email to python_inside_maya+unsubscr...@googlegroups.com.