Ejemplo n.º 1
0
    def send_end_of_transmission(self):
        """Send end of transmission packet"""
        # prepare message in byte stream
        msg = QtCore.QByteArray()
        msg_stream = QtCore.QDataStream(msg, QtCore.QIODevice.WriteOnly)
        msg_stream.writeInt64(message_ids["MSG_ID_EOT"])

        # reset state
        self.registered = False

        # print responses
        if self.verbose:
            print(self.response)
        try:
            if self.verbose:
                print("Sending EOT:", msg)
            # send the message over the socket
            self.socket.send(msg)
            # get ACK before return
            rcv_data = QtCore.QByteArray(self.socket.recv())
        except zmq.error.ZMQError:
            print("ZMQ Error - No ACK for EOT")
            return
        rcv_stream = QtCore.QDataStream(rcv_data, QtCore.QIODevice.ReadOnly)
        r = rcv_stream.readInt64()
        if r != message_ids["MSG_ID_EOT_ACK"]:
            print("Did not receive ACK for EOT but: ", r)
        else:
            if self.verbose:
                print("EOT success")
Ejemplo n.º 2
0
    def send_request_for_features(self):
        # prepare message in byte stream
        msg = QtCore.QByteArray()
        msg_stream = QtCore.QDataStream(msg, QtCore.QIODevice.WriteOnly)
        msg_stream.writeInt64(message_ids["MSG_ID_FEATURE_REQ"])

        try:
            if self.verbose:
                print("Send request for features message")
            # send the message over the socket
            self.socket.send(msg)
            # get ACK before return
            rcv = QtCore.QByteArray(self.socket.recv())
        except zmq.error.ZMQError:
            if self.verbose:
                print("ZMQ Error")
            return

        rcv_stream = QtCore.QDataStream(rcv, QtCore.QIODevice.ReadOnly)
        feats = []
        for i in range(3):
            feats.append(rcv_stream.readQStringList())

        r = rcv_stream.readInt64()
        if r == message_ids["MSG_ID_FEATURE_REQ_ACK"]:
            if self.verbose:
                print("Feature Request ACK")
        else:
            print("Feature Request failed!")

        if len([i for sublist in feats for i in sublist]) == 0:
            if self.verbose:
                print("Feature Request List Empty")
            feats = None
        return feats
Ejemplo n.º 3
0
    def handle_messages(self):
        """Handle messages from Shape-In

        Please don't override this function. Use
        :func:`ShapeLinkPlugin.handle_event` for your customized plugins.
        """
        # read first byte
        if self._first_call:  # needed for accurate line_profiler tests
            try:
                # get message from socket
                message = self.socket.recv()
                rcv = QtCore.QByteArray(message)
            except zmq.error.ZMQError:
                if self.verbose:
                    print(" ZMQ Error - timed out")
                return
            self._first_call = False
        else:
            try:
                # get message from socket
                message = self.socket.recv()
                rcv = QtCore.QByteArray(message)
            except zmq.error.ZMQError:
                if self.verbose:
                    print(" ZMQ Error - timed out")
                return

        rcv_stream = QtCore.QDataStream(rcv, QtCore.QIODevice.ReadOnly)
        r = rcv_stream.readInt64()

        send_data = QtCore.QByteArray()
        send_stream = QtCore.QDataStream(send_data, QtCore.QIODevice.WriteOnly)

        if r == message_ids["MSG_ID_FEATURE_REQ"]:
            # Allow plugin to request features
            self.run_features_request_message(send_stream)

        elif r == message_ids["MSG_ID_REGISTER"]:
            # register
            self.run_register_message(rcv_stream, send_stream)
            self.after_register()

        elif r == message_ids["MSG_ID_EOT"]:
            # End of Transmission (EOT) message
            self.run_EOT_message(send_stream)
            self.after_transmission()

        elif r >= 0:
            e = self.run_event_message(r, rcv_stream)
            # pass event object to user-defined method
            ret = self.handle_event(e)
            send_stream.writeBool(ret)

        else:
            # unknown message
            raise ValueError("Received unknown message header: {}".format(r))
        self.socket.send(send_data)
Ejemplo n.º 4
0
    def send_event(
            self,
            event_id: int,
            scalar_values: np.array,
            # vector of vector of short
            vector_values: List[np.array],
            image_values: List[np.array]) -> bool:
        """Send a single event to the other process"""

        # prepare message in byte stream
        msg = QtCore.QByteArray()
        msg_stream = QtCore.QDataStream(msg, QtCore.QIODevice.WriteOnly)
        msg_stream.writeInt64(event_id)

        assert len(scalar_values) == self.scalar_len
        assert len(vector_values) == self.vector_len
        assert len(image_values) == self.image_len
        assert np.issubdtype(scalar_values.dtype, np.floating)

        if self.scalar_len > 0:
            qstream_write_array(msg_stream, scalar_values)

        if self.vector_len > 0:
            msg_stream.writeUInt32(self.vector_len)
            for e in vector_values:
                assert e.dtype == np.int16, "fluorescence data is int16"
                qstream_write_array(msg_stream, e)

        if self.image_len > 0:
            msg_stream.writeUInt32(self.image_len)
            for (im_name, e) in zip(self.image_names, image_values):
                if im_name == "mask":
                    assert e.dtype == np.bool_, "'mask' data is bool"
                else:
                    assert e.dtype == np.uint8, "'image' data is uint8"
                qstream_write_array(msg_stream, e.flatten())

        try:
            # send the message over the socket
            self.socket.send(msg)
            # get ACK before return
            rcv_data = QtCore.QByteArray(self.socket.recv())
        except zmq.error.ZMQError:
            if self.verbose:
                print("ZMQ Error")
            return
        rcv_stream = QtCore.QDataStream(rcv_data, QtCore.QIODevice.ReadOnly)
        self.response.append(rcv_stream.readBool())
        return self.response[-1]
Ejemplo n.º 5
0
    def writeFile(self, fileName):
        file = QtCore.QFile(fileName)
        if not file.open(QtCore.QIODevice.WriteOnly):
            QtWidgets.QMessageBox.warning(
                self, self.tr("Spreadsheet"),
                self.tr("Cannot write file {0}:\n{1}.").format(
                    file.fileName(), file.errorString()))
            return False

        out = QtCore.QDataStream(file)
        out.setVersion(QtCore.QDataStream.Qt_4_1)

        out << int(self.MagicNumber)

        QtGui.QGuiApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        for row in range(0, self.RowCount):
            for column in range(0, self.ColumnCount):
                str = self.formula(row, column)
                if str != "":
                    out << int(row)
                    out << int(column)
                    out << str

        QtGui.QGuiApplication.restoreOverrideCursor()
        return True
Ejemplo n.º 6
0
    def readFile(self, fileName):
        file = QtCore.QFile(fileName)
        if not file.open(QtCore.QIODevice.ReadOnly):
            QtWidgets.QMessageBox.warning(
                self, self.tr("Spreadsheet"),
                self.tr("Cannot read file %1:\n%2.").arg(
                    file.fileName(), file.errorString()))
            return False

        inp = QtCore.QDataStream(file)
        inp.setVersion(QtCore.QDataStream.Qt_4_1)

        magic = inp.readInt32()
        if magic != self.MagicNumber:
            QtWidgets.QMessageBox.warning(
                self, self.tr("Spreadsheet"),
                self.tr("The file is not a Spreadsheet file."))
            return False

        self.clear()

        row = 0
        column = 0
        str = ""

        QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.WaitCursor)
        while not inp.atEnd():
            # inp >> row >> column >> str
            inp >> row
            inp >> column
            inp >> str
            self.setFormula(row, column, str)

        QtWidgets.QApplication.restoreOverrideCursor()
        return True
Ejemplo n.º 7
0
    def readFortune(self):
        instr = QtCore.QDataStream(self.tcpSocket)
        instr.setVersion(QtCore.QDataStream.Qt_4_0)

        if self.blockSize == 0:
            if self.tcpSocket.bytesAvailable() < 2:
                return

            self.blockSize = instr.readUInt16()

        if self.tcpSocket.bytesAvailable() < self.blockSize:
            return

        nextFortune = instr.readString()

        try:
            # Python v3.
            nextFortune = str(nextFortune, encoding='ascii')
        except TypeError:
            # Python v2.
            pass

        if nextFortune == self.currentFortune:
            QtCore.QTimer.singleShot(0, self.requestNewFortune)
            return

        self.currentFortune = nextFortune
        self.statusLabel.setText(self.currentFortune)
        self.getFortuneButton.setEnabled(True)
Ejemplo n.º 8
0
    def mousePressEvent(self, event):
        child = self.childAt(event.pos())
        if not child:
            return

        pixmap = QtGui.QPixmap(child.pixmap())

        itemData = QtCore.QByteArray()
        dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly)
        dataStream << pixmap << QtCore.QPoint(event.pos() - child.pos())

        mimeData = QtCore.QMimeData()
        mimeData.setData('application/x-dnditemdata', itemData)

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setPixmap(pixmap)
        drag.setHotSpot(event.pos() - child.pos())

        tempPixmap = QtGui.QPixmap(pixmap)
        painter = QtGui.QPainter()
        painter.begin(tempPixmap)
        painter.fillRect(pixmap.rect(), QtGui.QColor(127, 127, 127, 127))
        painter.end()

        child.setPixmap(tempPixmap)

        if drag.exec_(QtCore.Qt.CopyAction | QtCore.Qt.MoveAction,
                      QtCore.Qt.CopyAction) == QtCore.Qt.MoveAction:
            child.close()
        else:
            child.show()
            child.setPixmap(pixmap)
Ejemplo n.º 9
0
    def mouseMoveEvent(self, item):
        """Drag event"""

        shader = self.shader

        itemData = QtCore.QByteArray()
        dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly)
        dataStream << QtCore.QByteArray(str(shader))

        mimeData = QtCore.QMimeData()
        icon = QtGui.QIcon()

        if cmds.nodeType(shader) == 'displacementShader':
            mimeData.setData("application/x-displacement", itemData)
            icon.addFile(os.path.join(d, "../../../icons/sgblue.xpm"),
                         QtCore.QSize(25, 25))
        else:
            mimeData.setData("application/x-shader", itemData)
            icon.addFile(os.path.join(d, "../../../icons/sg.xpm"),
                         QtCore.QSize(25, 25))

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setPixmap(icon.pixmap(50, 50))
        drag.setHotSpot(QtCore.QPoint(0, 0))
        drag.start(QtCore.Qt.MoveAction)
Ejemplo n.º 10
0
    def __init__(self,
                 host: str,
                 port: int,
                 parent: Optional[QtCore.QObject] = None):
        """Initialise a new instance of the class."""
        super().__init__(parent)

        self.host: str = host
        self.port: int = port

        self.__accounts: Dict[int, CompetitorAccount] = dict()
        self.__now: float = 0.0
        self.__order_books: List[OrderBook] = list(
            OrderBook(i, 0.0, 0.0) for i in Instrument)
        self.__orders: Dict[int, Dict[int, Order]] = {0: dict()}
        self.__stop_later: bool = False
        self.__teams: Dict[int, str] = {0: ""}

        self.__ask_prices: List[int] = [0] * TOP_LEVEL_COUNT
        self.__ask_volumes: List[int] = [0] * TOP_LEVEL_COUNT
        self.__bid_prices: List[int] = [0] * TOP_LEVEL_COUNT
        self.__bid_volumes: List[int] = [0] * TOP_LEVEL_COUNT

        self.__socket = QtNetwork.QTcpSocket(self)
        self.__socket.connected.connect(self.on_connected)
        self.__socket.disconnected.connect(self.on_disconnected)
        self.__socket.errorOccurred.connect(self.on_error_occurred)
        self.__socket.readyRead.connect(self.on_data_received)
        self.__stream = QtCore.QDataStream(self.__socket)
Ejemplo n.º 11
0
def mimeDataAdd(mimeData, mimeFormat, objects):
    """Sets mime data."""
    data = QtCore.QByteArray()
    stream = QtCore.QDataStream(data, QtCore.QIODevice.WriteOnly)
    text = ":".join(objects)
    stream.writeQString(text)
    mimeData.setData(mimeFormat, data)
Ejemplo n.º 12
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat(
                'image/x-puzzle-piece') and self.findPiece(
                    self.targetSquare(event.pos())) == -1:
            pieceData = event.mimeData().data('image/x-puzzle-piece')
            stream = QtCore.QDataStream(pieceData, QtCore.QIODevice.ReadOnly)
            square = self.targetSquare(event.pos())
            pixmap = QPixmap()
            location = QtCore.QPoint()
            stream >> pixmap >> location

            self.pieceLocations.append(location)
            self.piecePixmaps.append(pixmap)
            self.pieceRects.append(square)

            self.hightlightedRect = QtCore.QRect()
            self.update(square)

            event.setDropAction(QtCore.Qt.MoveAction)
            event.accept()

            if location == QtCore.QPoint(square.x() / 80, square.y() / 80):
                self.inPlace += 1
                if self.inPlace == 25:
                    self.puzzleCompleted.emit()
        else:
            self.highlightedRect = QtCore.QRect()
            event.ignore()
Ejemplo n.º 13
0
def dropEvent(event, format = "application/x-job-names"):
    if event.mimeData().hasFormat(format):
        item = event.mimeData().data(format)
        stream = QtCore.QDataStream(item, QtCore.QIODevice.ReadOnly)
        names = stream.readQString()
        event.accept()
        return [name for name in str(names).split(":") if name]
Ejemplo n.º 14
0
def load_project(project_path):
    """Loads project from p00p file"""
    file = QtCore.QFile(project_path)
    if not file.open(QtCore.QIODevice.ReadOnly):
        raise EnvironmentError(file.errorString())
    else:
        in_ = QtCore.QDataStream(file)

        # Read and check the header
        magic = in_.readInt32()
        if magic != MAGIC_NUMBER:
            raise EnvironmentError("Bad file format")

        # Read the version
        version = in_.readInt32()
        if version > FORMAT_VERSION:
            raise EnvironmentError("File too new for this version.")
        in_.setVersion(QtCore.QDataStream.Qt_5_14)

        # Read the data
        data_size = in_.readInt32()
        data = in_.readRawData(data_size)

        file.close()
        return Project.from_JSON_serializable(pickle.loads(bytes(data)),
                                              project_path)
Ejemplo n.º 15
0
    def dropMimeData(self, data, action, row, column, parent):
        if not data.hasFormat('image/x-puzzle-piece'):
            return False

        if action == QtCore.Qt.IgnoreAction:
            return True

        if column > 0:
            return False

        if not parent.isValid():
            if row < 0:
                endRow = len(self.pixmaps)
            else:
                endRow = min(row, len(self.pixmaps))
        else:
            endRow = parent.row()

        encodedData = data.data('image/x-puzzle-piece')
        stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.ReadOnly)

        while not stream.atEnd():
            pixmap = QPixmap()
            location = QtCore.QPoint()
            stream >> pixmap >> location

            self.beginInsertRows(QtCore.QModelIndex(), endRow, endRow)
            self.pixmaps.insert(endRow, pixmap)
            self.locations.insert(endRow, location)
            self.endInsertRows()

            endRow += 1

        return True
Ejemplo n.º 16
0
    def serialize(self) -> QtCore.QByteArray:
        _bytearray = QtCore.QByteArray()
        datastream = QtCore.QDataStream(_bytearray, QtCore.QIODevice.WriteOnly)

        datastream.writeUInt8(self.contentType)
        datastream.writeString(self.payload)

        return _bytearray
Ejemplo n.º 17
0
 def write(self, data):
     block = QtCore.QByteArray()
     out = QtCore.QDataStream(block, QtCore.QIODevice.ReadWrite)
     out.setVersion(QtCore.QDataStream.Qt_4_2)
     out.writeUInt32(2 * len(data) + 4)
     out.writeQString(data)
     if self.socket.state() == QtNetwork.QAbstractSocket.ConnectedState:
         self.socket.write(block)
Ejemplo n.º 18
0
    def deserialize(_bytearray: QtCore.QByteArray) -> "Packet":
        packet = Packet()
        datastream = QtCore.QDataStream(_bytearray)

        packet.contentType = datastream.readUInt8()
        packet.payload = datastream.readString()

        return packet
Ejemplo n.º 19
0
 def copy(self):
     items = selectedItems(self.p_scene, self.w_parent)
     if items is None:
         return
     self.w_parent.copiedItems.clear()
     self.w_parent.pasteOffset = 5
     stream = QtCore.QDataStream(self.w_parent.copiedItems,
                                 QtCore.QIODevice.WriteOnly)
     writeItemToBuffer(stream, items)
Ejemplo n.º 20
0
def mimeData(nodeNames):
    mimeData = QtCore.QMimeData()
    encodedData = QtCore.QByteArray()
    stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.WriteOnly)
    for name in nodeNames:
        stream.writeString(name)
    mimeData.setData(renderSetupProxy.RENDER_SETUP_MIME_TYPE, encodedData)

    return mimeData
Ejemplo n.º 21
0
 def paste(self):
     if self.w_parent.copiedItems.isEmpty():
         return
     stream = QtCore.QDataStream(self.w_parent.copiedItems,
                                 QtCore.QIODevice.ReadOnly)
     readItemsFromBuffer(stream,
                         self.p_scene,
                         self.w_parent,
                         self.w_parent.pasteOffset,
                         snap=self.a_snap)
     self.w_parent.pasteOffset += 5
Ejemplo n.º 22
0
 def save(self):
     """Saves the project at project path as p00p file"""
     file = QtCore.QFile(self.path)
     if not file.open(QtCore.QIODevice.WriteOnly):
         raise EnvironmentError(file.errorString())
     else:
         data = QtCore.QByteArray(
             pickle.dumps(self.to_JSON_serializable(), protocol=4))
         out = QtCore.QDataStream(file)
         out.writeInt32(MAGIC_NUMBER)
         out.writeInt32(FORMAT_VERSION)
         out.setVersion(QtCore.QDataStream.Qt_5_14)
         out << data
         file.close()
Ejemplo n.º 23
0
    def read(self):
        ins = QtCore.QDataStream(self.socket)
        ins.setVersion(QtCore.QDataStream.Qt_4_2)

        while not ins.atEnd():
            if self.block_size == 0:
                if self.socket.bytesAvailable() < 4:
                    return
                self.block_size = ins.readUInt32()
            if self.socket.bytesAvailable() < self.block_size:
                return
            data = ins.readQString()
            self.block_size = 0
            self.message_stream.on_next(data)
Ejemplo n.º 24
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat('image/x-puzzle-piece'):
            pieceData = event.mimeData().data('image/x-puzzle-piece')
            dataStream = QtCore.QDataStream(pieceData, QtCore.QIODevice.ReadOnly)
            pixmap = QtGui.QPixmap()
            location = QtCore.QPoint()
            dataStream >> pixmap >> location

            self.addPiece(pixmap, location)

            event.setDropAction(QtCore.Qt.MoveAction)
            event.accept()
        else:
            event.ignore()
Ejemplo n.º 25
0
    def mimeData(self, indexes):
        mimeData = QtCore.QMimeData()
        encodedData = QtCore.QByteArray()

        stream = QtCore.QDataStream(encodedData, QtCore.QIODevice.WriteOnly)

        for index in indexes:
            if index.isValid():
                pixmap = QPixmap(self.data(index, QtCore.Qt.UserRole))
                location = self.data(index, QtCore.Qt.UserRole + 1)
                stream << pixmap << location

        mimeData.setData('image/x-puzzle-piece', encodedData)
        return mimeData
Ejemplo n.º 26
0
    def sendFortune(self):
        block = QtCore.QByteArray()
        out = QtCore.QDataStream(block, QtCore.QIODevice.WriteOnly)
        out.setVersion(QtCore.QDataStream.Qt_4_0)
        out.writeUInt16(0)
        fortune = self.fortunes[random.randint(0, len(self.fortunes) - 1)]

        out.writeString(fortune)
        out.device().seek(0)
        out.writeUInt16(block.size() - 2)

        clientConnection = self.tcpServer.nextPendingConnection()
        clientConnection.disconnected.connect(clientConnection.deleteLater)

        clientConnection.write(block)
        clientConnection.disconnectFromHost()
Ejemplo n.º 27
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat("image/x-workflow-step"):
            piece_data = event.mimeData().data("image/x-workflow-step")
            stream = QtCore.QDataStream(piece_data, QtCore.QIODevice.ReadOnly)
            hot_spot = QtCore.QPoint()

            _name_len = stream.readUInt32()
            buf = QtCore.QByteArray()
            stream >> buf
            name = buf.data().decode()

            stream >> hot_spot

            position = self.mapToScene(event.pos()) - hot_spot

            scene = self.scene()

            # Create a step with the given name.
            step = workflowStepFactory(name, self._location)
            self.set_default_id(step)
            step.setMainWindow(self._main_window)
            step.setLocation(self._location)
            step.registerConfiguredObserver(scene.stepConfigured)
            step.registerDoneExecution(scene.doneExecution)
            step.registerOnExecuteEntry(scene.setCurrentWidget)
            step.registerIdentifierOccursCount(scene.identifierOccursCount)

            # Trigger a validation.
            step.deserialize(step.serialize())

            # Prepare meta step for the graphics scene.
            meta_step = MetaStep(step)
            node = Node(meta_step)
            node.showStepName(self._showStepNames)

            self._undoStack.beginMacro('Add node')
            self._undoStack.push(CommandAdd(scene, node))
            # Set the position after it has been added to the scene.
            self._undoStack.push(CommandMove(node, position, scene.ensureItemInScene(node, position)))
            scene.clearSelection()
            node.setSelected(True)
            self._undoStack.endMacro()

            self.setFocus()
            event.accept()
        else:
            event.ignore()
Ejemplo n.º 28
0
    def run(self):
        tcpSocket = QtNetwork.QTcpSocket()
        if not tcpSocket.setSocketDescriptor(self.socketDescriptor):
            self.error.emit(tcpSocket.error())
            return

        block = QtCore.QByteArray()
        outstr = QtCore.QDataStream(block, QtCore.QIODevice.WriteOnly)
        outstr.setVersion(QtCore.QDataStream.Qt_4_0)
        outstr.writeUInt16(0)
        outstr.writeString(self.text)
        outstr.device().seek(0)
        outstr.writeUInt16(block.count() - 2)

        tcpSocket.write(block)
        tcpSocket.disconnectFromHost()
        tcpSocket.waitForDisconnected()
    def run(self):
        self.mutex.lock()
        serverName = self.hostName
        serverPort = self.port
        self.mutex.unlock()

        while not self.quit:
            Timeout = 5 * 1000

            socket = QtNetwork.QTcpSocket()
            socket.connectToHost(serverName, serverPort)

            if not socket.waitForConnected(Timeout):
                self.error.emit(socket.error(), socket.errorString())
                return

            while socket.bytesAvailable() < 2:
                if not socket.waitForReadyRead(Timeout):
                    self.error.emit(socket.error(), socket.errorString())
                    return

            instr = QtCore.QDataStream(socket)
            instr.setVersion(QtCore.QDataStream.Qt_4_0)
            blockSize = instr.readUInt16()

            while socket.bytesAvailable() < blockSize:
                if not socket.waitForReadyRead(Timeout):
                    self.error.emit(socket.error(), socket.errorString())
                    return

            self.mutex.lock()
            fortune = instr.readString()

            try:
                # Python v3.
                fortune = str(fortune, encoding='ascii')
            except TypeError:
                # Python v2.
                pass

            self.newFortune.emit(fortune)

            self.cond.wait(self.mutex)
            serverName = self.hostName
            serverPort = self.port
            self.mutex.unlock()
Ejemplo n.º 30
0
    def startDrag(self, supportedActions):
        item = self.currentItem()

        itemData = QtCore.QByteArray()
        dataStream = QtCore.QDataStream(itemData, QtCore.QIODevice.WriteOnly)
        pixmap = QtGui.QPixmap(item.data(QtCore.Qt.UserRole))
        location = item.data(QtCore.Qt.UserRole+1)

        dataStream << pixmap << location

        mimeData = QtCore.QMimeData()
        mimeData.setData('image/x-puzzle-piece', itemData)

        drag = QtGui.QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(QtCore.QPoint(pixmap.width()/2, pixmap.height()/2))
        drag.setPixmap(pixmap)

        if drag.exec_(QtCore.Qt.MoveAction) == QtCore.Qt.MoveAction:
            self.takeItem(self.row(item))