pyqt darg and drop

Sachin Tiwari sachin.tiwari50 at gmail.com
Sat Oct 4 06:05:17 EDT 2014


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()
                                     

                                                                           



More information about the Python-list mailing list