[PyQt] Drag and Drop
    Reinaldo de Carvalho 
    reinaldoc at gmail.com
       
    Tue May  6 15:03:51 BST 2008
    
    
  
I'm trying to do dragdrop work but dont have success. In the example
below the only print is ListView.dragEnterEvent.
Any suggestion?
-- 
Reinaldo Carvalho
http://korreio.sf.net
#!/usr/bin/env python
from qt import *
class ListView(QListView) :
   def __init__(self, parent = None, name = None) :
      QListView.__init__(self, parent, name)
      self.connect(self, SIGNAL("dropped(QDropEvent *)"), self.itemDropped)
   def dragEnterEvent(self, qDragEnterEvent) :
      print "ListView.dragEnterEvent"
      qDragEnterEvent.accept(1)
   def dragObject(self) :
      item = self.currentItem()
      if (not item) :
         return
      itemName = str(item.text(0))
      d = QTextDrag(itemName, self)
      return d
   def itemDropped(self, qDropEvent) :
      print "ListView.dropped"
class ListViewItem(QListViewItem) :
   def __init__(self, parent, text) :
      QListViewItem.__init__(self, parent, text)
   def dragEntered(self) :
      print "ListViewItem.dragEntered"
   def acceptDrop(self, mimeSource) :
      print "ListViewItem.acceptDrop"
      return 1
   def dropped(self, dropEvent) :
      print "ListViewItem.dropped"
      qStr = QString()
      decode = QTextDrag.decode(dropEvent, qStr)
      if (not decode) :
         return
      itemName = str(self.text(0))
      droppedItemName = str(qStr)
      self.listView().emit(PYSIGNAL("dropOnItem"), (itemName, droppedItemName))
class dnd (QWidget) :
   def __init__(self, parent = None, name = None) :
      QWidget.__init__(self, parent, name)
      self.listview1 = ListView(self)
      self.listview2 = ListView(self)
      self.listview1.addColumn("col1")
      self.listview2.addColumn("col2")
      self.listview1.setGeometry(QRect(45,31,221,250))
      self.listview2.setGeometry(QRect(316,32,231,240))
      self.listview1.show()
      self.listview2.show()
      self.listview2.setAcceptDrops(1)
      qlvi1 = QListViewItem(self.listview1, "Item11")
      qlvi1.setDragEnabled(1)
      qlvi2 = ListViewItem(self.listview2, "Item21")
      qlvi2.setDropEnabled(1)
if __name__ == "__main__" :
   import sys
   qa = QApplication(sys.argv)
   d = dnd()
   d.show()
   qa.setMainWidget(d)
   qa.exec_loop()
    
    
More information about the PyQt
mailing list