[PyQt] question re Atext drag and drop in PyQt3

Tony Willis Tony.Willis at nrc-cnrc.gc.ca
Fri Apr 27 22:43:50 BST 2007


I hope that someone can help me with the following. I'm attempting
to drag and drop some floating point numbers from one widget to
another with PyQt3. The easiest way to do the dragging would appear to be 
with the QTextDrag object. So I convert my floating point numbers
to a python string  via the 'struct' module 'pack' method - see
line 30 in the 'startDrag' callback of the following script.

However when I unpack in the 
'dropEvent' callback I get incorrect values
(1.0569533721655998e-307, 1.7246384989945063e-307) instead of
the expected (1.2, 3.5). I'm obviously screwing up some 
ascii / unicode / binary translation thingy somewhere, as the
methods work ok when I drag straight ascii text such as 'abcd_xyz'
i.e. in that case the QTextDrag.decode call in line 19  will give 
text as 'abcd_xyz'.

Thanks for any advice on this.

Cheers

Tony
---------------------------

#!/usr/bin/env python
from sys import argv
from qt import *
from struct import *

class DropDemo(QListView):
     def __init__(self,parent=None,name=None):
         QListView.__init__(self,parent,name)
         self.setAcceptDrops(True)
         self.setGeometry(10,10,100,60)

     def dragEnterEvent(self, event):
         print 'in dragEnterEvent'
         event.accept(QTextDrag.canDecode(event))

     def dropEvent(self, event):
         text= QString()
         if QTextDrag.decode(event, text):
           result = unpack('dd', text)
           print 'dropped ', result
#dropped  (1.0569533721655998e-307, 1.7246384989945063e-307)
         else:
           print 'decode failure'

     def mouseMoveEvent(self, event):
         self.startDrag()

     def startDrag(self):
         pack_str = pack('dd', 1.2, 3.5)
         d = QTextDrag(pack_str, self)
# dragging the following works
#       d = QTextDrag('abcd_xyz', self)
         .dragCopy()

if __name__ == '__main__':
     a = QApplication(argv)
     w = DropDemo()
     w.setCaption("Drag and Drop Test")
     w.resize(120,80)
     a.setMainWidget(w)
     w.show()
     a.exec_loop()
##########################


-- 
___________
Tony Willis
National Research Council   Tony.Willis at nrc-cnrc.gc.ca
Box 248                     (250)493-2277
Penticton, BC  V2A 6J9      fax: 493-7767
Government of Canada        Gouvernement du Canada



More information about the PyQt mailing list