pyqt darg and drop

Sachin Tiwari sachin.tiwari50 at gmail.com
Sat Oct 4 12:32:35 CEST 2014


On Saturday, October 4, 2014 3:35:33 PM UTC+5:30, Sachin Tiwari wrote:
> Hi
> 
> 
> 
> I want to drag and drop push multiple push buttons but its working for only for last button. And I want to connect them by a wire.
> 
> 
> 
> Please help.
> 
> 
> 
>           import sys
> 
> from PyQt4 import QtGui, QtCore
> 
> 
> 
> 
> 
> class Button(QtGui.QPushButton):
> 
>     def mouseMoveEvent(self, e):
> 
>         if e.buttons() != QtCore.Qt.RightButton:
> 
>             return
> 
> 
> 
>         mimeData = QtCore.QMimeData()
> 
>         mimeData.setText('%d,%d' % (e.x(), e.y()))
> 
> 
> 
>         pixmap = QtGui.QPixmap.grabWidget(self)
> 
> 
> 
>         painter = QtGui.QPainter(pixmap)
> 
>         painter.setCompositionMode(painter.CompositionMode_DestinationIn)
> 
>         painter.fillRect(pixmap.rect(), QtGui.QColor(0, 0, 0, 127))
> 
>         painter.end()
> 
> 
> 
>         drag = QtGui.QDrag(self)
> 
>         drag.setMimeData(mimeData)
> 
>         drag.setPixmap(pixmap)
> 
>         drag.setHotSpot(e.pos())
> 
>         if drag.exec_(QtCore.Qt.CopyAction & QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction:
> 
>             print 'moved'
> 
>         else:
> 
>             print 'copied'
> 
> 
> 
>     def mousePressEvent(self, e):
> 
>         QtGui.QPushButton.mousePressEvent(self, e)
> 
>         if e.button() == QtCore.Qt.LeftButton:
> 
>             print 'press'
> 
> 
> 
> 
> 
> 
> 
> class Example(QtGui.QWidget):
> 
>     def __init__(self):
> 
>         super(Example, self).__init__()
> 
>         self.initUI()
> 
> 
> 
> 
> 
>     def initUI(self):
> 
>         self.setAcceptDrops(True)
> 
> 
> 
>         button = Button('Button', self)
> 
>         button1 = Button('Button1', self)
> 
>         button.move(100, 65)
> 
>         button1.move(200, 65)
> 
> 
> 
>         self.buttons = [button]
> 
> 
> 
>         self.setWindowTitle('Copy or Move')
> 
>         self.setGeometry(300, 300, 280, 150)
> 
> 
> 
> 
> 
>     def dragEnterEvent(self, e):
> 
>         e.accept()
> 
> 
> 
> 
> 
>     def dropEvent(self, e):
> 
>         mime = e.mimeData().text()
> 
>         x, y = map(int, mime.split(','))
> 
> 
> 
>         if e.keyboardModifiers() & QtCore.Qt.ShiftModifier:
> 
>             button = Button('Button', self)
> 
>             button1 = Button('Button1', self)
> 
>             button.move(e.pos()-QtCore.QPoint(x, y))
> 
>             button1.move(e.pos()-QtCore.QPoint(x, y))
> 
>             button.show()
> 
>             button1.show()
> 
>             self.buttons.append(button)
> 
>             self.buttons.append(button1)
> 
>             e.setDropAction(QtCore.Qt.CopyAction)
> 
>         else:
> 
>             e.source().move(e.pos()-QtCore.QPoint(x, y))
> 
>             e.setDropAction(QtCore.Qt.MoveAction)
> 
>         e.accept()
> 
> 
> 
> 
> 
> if __name__ == '__main__':
> 
>     app = QtGui.QApplication(sys.argv)
> 
>     ex = Example()
> 
>     ex.show()

Change this line,

 if drag.exec_(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction: 



More information about the Python-list mailing list