2015-12-02 77 views
0

有没有一种方法可以让项目被拖/放以及它们的目标父级?获取拖放式qtreewidget项目 - Python

在理想情况下,我想要发生的是dropEvent完成后,它会打印已移动的qtreewidget项以及项目移至的新父项。父母可能是qtreewidget本身或另一个qtreewidgetitem,具体取决于下降发生的位置。

有人可以帮我一下吗?

以下是我到目前为止的代码。

enter image description here

# Imports 
# ------------------------------------------------------------------------------ 
import sys 
from PySide import QtGui, QtCore, QtSvg 

class TreeNodeItem(QtGui.QTreeWidgetItem): 
    def __init__(self, parent, name=""): 
     super(TreeNodeItem, self).__init__(parent) 
     self.setText(0, name) 
     self.stuff = "Custom Names - " + str(name) 

class TreeWidget(QtGui.QTreeWidget): 
    def __init__(self, parent=None): 
     QtGui.QTreeWidget.__init__(self, parent) 
     self.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) 
     self.setSelectionMode(QtGui.QAbstractItemView.ExtendedSelection) 
     self.setItemsExpandable(True) 
     self.setAnimated(True) 
     self.setDragEnabled(True) 
     self.setDropIndicatorShown(True) 
     self.setDragDropMode(QtGui.QAbstractItemView.InternalMove) 
     self.setAlternatingRowColors(True) 

    # def dropEvent(self, event): 
    #  print "finished" 
    def dropEvent(self, event): 
     return_val = super(TreeWidget, self).dropEvent(event) 
     print ("Drop finished") 
     d = event.mimeData() 
     print d, event.source() 
     return return_val 

# Main 
# ------------------------------------------------------------------------------ 
class ExampleWidget(QtGui.QWidget): 

    def __init__(self,): 
     super(ExampleWidget, self).__init__() 

     self.initUI() 

    def initUI(self): 

     # formatting 
     self.resize(250, 400) 
     self.setWindowTitle("Example") 

     # widget - passes treewidget 
     self.itemList = QtGui.QTreeWidget() 
     self.itemList = TreeWidget() 

     headers = [ "Items" ] 
     self.itemList.setColumnCount(len(headers)) 
     self.itemList.setHeaderLabels(headers)    

     # layout Grid - row/column/verticalpan/horizontalspan 
     self.mainLayout = QtGui.QGridLayout(self) 
     self.mainLayout.setContentsMargins(5,5,5,5) 
     self.mainLayout.addWidget(self.itemList, 0,0,1,1) 

     # display 
     self.show() 

    # Functions 
    # -------------------------------------------------------------------------- 
    def closeEvent(self, event): 
     print "closed" 


    def showEvent(self, event): 
     print "open" 
     for i in xrange(20): 
      TreeNodeItem(parent=self.itemList , name=str(i)) 

# Main 
# ------------------------------------------------------------------------------ 
if __name__ == "__main__": 
    app = QtGui.QApplication(sys.argv) 
    ex = ExampleWidget() 
    sys.exit(app.exec_()) 

回答