Example #1
0
 def decodeMimeData(self, bytearray):
     """
     see:
     https://wiki.python.org/moin/PyQt/Handling%20Qt's%20internal%20item%20MIME%20type
     http://doc.qt.io/qt-5.5/datastreamformat.html
     """
     data = {}
     ds = QDataStream(bytearray)
     while not ds.atEnd():
         item = []
         row = ds.readInt32()
         column = ds.readInt32()
         number_of_items = ds.readInt32()
         print("rc:", row, column, number_of_items)
         for i in range(number_of_items):
             key = ds.readInt32()
             value = QVariant()
             ds >> value
             item.append((value.value(), Qt.ItemDataRole(key)))
         data[(row, column)] = item
     return data
Example #2
0
    def sendImage(self):
        self.request = QByteArray()
        stream = QDataStream(self.request, QIODevice.WriteOnly)
        stream.setVersion(QDataStream.Qt_4_9)
        stream.writeUInt32(0)
        stream.writeUInt32(1)  # HEADER: this is an QImage

        ba = QByteArray()
        buffer = QBuffer(ba)
        self.img = QImage()
        self.img.load(f"{self.text}")
        self.img.save(buffer, "PNG")  # writes image into ba in PNG format
        stream.writeBytes(ba)

        stream.device().seek(0)
        stream.writeUInt32(self.request.size() - self.SIZEOF_UINT32)
        self.write(self.request)
        self.nextBlockSize = 0
        self.request = None
        print(f"sending '{self.text}' to Server")
        self.messageSent.emit("[SENT] " + self.text)
Example #3
0
def _list_item_mime_to_text(mime_data, c=False):
    if mime_data.hasText():
        return
    data = mime_data.data('application/x-qabstractitemmodeldatalist')
    if not data:
        return
    ds = QDataStream(data)
    ds.readInt32() # read row (don't need)
    ds.readInt32() # read col (don't need)
    value = None
    for i in range(ds.readInt32()):
        if Qt.ItemDataRole(ds.readInt32()) == Qt.DisplayRole:
            value = ds.readQVariant()
            break
    if value is None:
        return
    if c:
        value = 'c("{}")'.format(value)
    else:
        value = '"{}"'.format(value)
    mime_data.setText(value)
Example #4
0
    def readFortune(self):
        instr = QDataStream(self.tcpSocket)
        instr.setVersion(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.readQString()
        if nextFortune == self.currentFortune:
            QTimer.singleShot(0, self.requestNewFortune)
            return

        self.currentFortune = nextFortune
        self.statusLabel.setText(self.currentFortune)
        self.getFortuneButton.setEnabled(True)
Example #5
0
    def restoreState(self, state):
        """
        Restore the toolbox from a :class:`QByteArray` `state`.

        .. note:: The toolbox should already be populated for the state
                  changes to take effect.

        """
        # In version 1 of saved state the state was saved in
        # a simple dict repr string.
        if isinstance(state, QByteArray):
            stream = QDataStream(state, QIODevice.ReadOnly)
            version = stream.readInt()
            if version == 2:
                expanded = stream.readQStringList()
                for action in map(self.tabAction, range(self.count())):
                    if (action.text() in expanded) != action.isChecked():
                        action.trigger()

                return True
        return False
Example #6
0
    def mimeData(self, indexes):
        item_data = QByteArray()
        data_stream = QDataStream(item_data, QIODevice.WriteOnly)

        data_stream.writeInt(len(indexes))
        tmp = None
        for idx in indexes:
            s_idx = self.mapToSource(idx)
            tmp = self.sourceModel().data(s_idx, role=Qt.UserRole)
            data_stream.writeInt(tmp.file_id)  # file ID
            # may need, in case of copy/move for real folder using mimeData
            data_stream.writeInt(tmp.dir_id)
            # > 0 - virtual folder, 0 - real, -1 - adv.
            data_stream.writeInt(tmp.source)

        mime_data = QMimeData()
        if tmp.source > 0:  # files are from virtual folder
            mime_data.setData(MimeTypes[VIRTUAL_FILE], item_data)
        else:
            mime_data.setData(MimeTypes[REAL_FILE], item_data)
        return mime_data
Example #7
0
    def startDrag(self, supportedActions):
        item = self.currentItem()

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

        dataStream << pixmap << location

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

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

        if drag.exec_(Qt.MoveAction) == Qt.MoveAction:
            if self.currentItem() is not None:
                self.takeItem(self.row(item))
Example #8
0
    def _decode_data(self, data):
        encoded_data = data.data(self.mime_format)
        stream = QDataStream(encoded_data)

        dragged_data = []

        while not stream.atEnd():
            row = stream.readInt32()
            column = stream.readInt32()

            num_items_in_map = stream.readUInt32()
            item = {'row': row, 'column': column, 'map items': {}}
            for i in range(num_items_in_map):
                key = stream.readInt32()
                value = QVariant()
                stream >> value
                item['map items'][Qt.ItemDataRole(key)] = value.value()

            dragged_data.append(item)

        return dragged_data
Example #9
0
    def __iniWrite(self):  ##开始写文件操作
        self.fileDevice = QFile(self.__testFileName)  #创建文件对象
        if not self.fileDevice.open(QIODevice.WriteOnly):
            del self.fileDevice  #删除对象
            return False

        self.fileStream = QDataStream(self.fileDevice)

        self.fileStream.setVersion(QDataStream.Qt_5_12)  #设置流版本号,写入和读取的版本号要兼容
        if self.ui.radio_BigEndian.isChecked():
            self.fileStream.setByteOrder(QDataStream.BigEndian)
        else:
            self.fileStream.setByteOrder(QDataStream.LittleEndian)

        if self.ui.radio_Single.isChecked():  #必须要设置,float和double都按照这个精度
            self.fileStream.setFloatingPointPrecision(
                QDataStream.SinglePrecision)
        else:
            self.fileStream.setFloatingPointPrecision(
                QDataStream.DoublePrecision)
        return True
Example #10
0
    def readResponse(self):
        stream = QDataStream(self.socket)
        stream.setVersion(QDataStream.Qt_5_7)

        while True:
            if self.nextBlockSize == 0:
                if self.socket.bytesAvailable() < SIZEOF_UINT16:
                    break
                self.nextBlockSize = stream.readUInt16()
            if self.socket.bytesAvailable() < self.nextBlockSize:
                break
            action = ""
            room = ""
            date = QDate()
            action = stream.readQString()
            room = stream.readQString()
            if action == "BOOKINGSFORROOM":
                dates = []
                for x in range(stream.readInt32()):
                    stream >> date
                    dates.append(str(date.toString(Qt.ISODate)))
                dates = ", ".join(dates)
            if action not in ("BOOKINGSFORROOM", "ERROR"):
                stream >> date
            if action == "ERROR":
                msg = "Error: {0}".format(room)
            elif action == "BOOK":
                msg = "Booked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            elif action == "UNBOOK":
                msg = "Unbooked room {0} for {1}".format(
                    room, date.toString(Qt.ISODate))
            elif action == "BOOKINGSONDATE":
                msg = "Rooms booked on {0}: {1}".format(
                    date.toString(Qt.ISODate), room)
            elif action == "BOOKINGSFORROOM":
                msg = "Room {0} is booked on: {1}".format(room, dates)
            self.responseLabel.setText(msg)
            self.updateUi()
            self.nextBlockSize = 0
Example #11
0
    def load_from_memory(self):  # consumer slot
        buf = QBuffer()
        ins = QDataStream(buf)
        image = QImage()

        if True:  # first variant (much simpler / shorter, more robust)
            try:
                from prodcon_ipc.consumer_ipc import ScopedConsumer
                with ScopedConsumer(self.consumer_ipc) as sc:
                    buf.setData(sc.data())
                    buf.open(QBuffer.ReadOnly)
                    ins >> image
            except Exception as err:
                self.ui.label.setText(str(err))

        else:  # second variant, using begin()...end() manually
            try:
                data = self.consumer_ipc.begin()
            except RuntimeError as err:
                self.ui.label.setText(str(err))
                return

            # Read from the shared memory:
            try:
                buf.setData(data)
                buf.open(QBuffer.ReadOnly)
                ins >> image
            except Exception as err:
                logzero.logger.error(str(err))

            try:
                self.consumer_ipc.end()
            except RuntimeError as err:
                self.ui.label.setText(str(err))
                return

        if not image.isNull():
            self.ui.label.setPixmap(QPixmap.fromImage(image))
        else:
            logzero.logger.error("Image data was corrupted.")
    def mousePressEvent(self, event):
        child = self.childAt(event.pos())
        if not child:
            return

        if child == self.BackgroundPic:
            return
        if child == self.ControlPoints[0]:
            self.number_of_draggable = 0
        else:
            self.number_of_draggable = 1
        child.move(event.pos())
        pixmap = QPixmap(child.pixmap())

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

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

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

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

        child.setPixmap(tempPixmap)

        if drag.exec_(Qt.CopyAction | Qt.MoveAction,
                      Qt.CopyAction) == Qt.MoveAction:
            child.close()
        else:
            child.show()
            child.setPixmap(pixmap)
Example #13
0
def switch_language(core_config, lang_key=None):
    global _current_translator
    global _current_locale_language

    QCoreApplication.translate = qt_translate

    if not lang_key:
        lang_key = core_config.gui_language
    if not lang_key:
        lang_key = get_locale_language()
        logger.info("No language in settings, trying local language",
                    lang_key=lang_key)
    if lang_key not in LANGUAGES.values():
        logger.info("Language unavailable, defaulting to English",
                    lang_key=lang_key)
        lang_key = "en"

    _current_locale_language = lang_key

    rc_file = QFile(f":/translations/translations/parsec_{lang_key}.mo")
    if not rc_file.open(QIODevice.ReadOnly):
        logger.warning("Unable to read the translations for language",
                       lang_key=lang_key)
        return None

    try:
        data_stream = QDataStream(rc_file)
        out_stream = io.BytesIO()
        content = data_stream.readRawData(rc_file.size())
        out_stream.write(content)
        out_stream.seek(0)
        _current_translator = gettext.GNUTranslations(out_stream)
        _current_translator.install()
    except OSError:
        logger.warning("Unable to load the translations for language",
                       lang_key=lang_key)
        return None
    finally:
        rc_file.close()
    return lang_key
Example #14
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat('application/x-fridgemagnet'):
            mime = event.mimeData()
            itemData = mime.data('application/x-fridgemagnet')
            dataStream = QDataStream(itemData, QIODevice.ReadOnly)

            text = QByteArray()
            offset = QPoint()
            dataStream >> text >> offset

            try:
                # Python v3.
                text = str(text, encoding='latin1')
            except TypeError:
                # Python v2.
                text = str(text)

            newLabel = DragLabel(text, self)
            newLabel.move(event.pos() - offset)
            newLabel.show()

            if event.source() in self.children():
                event.setDropAction(Qt.MoveAction)
                event.accept()
            else:
                event.acceptProposedAction()
        elif event.mimeData().hasText():
            pieces = event.mimeData().text().split()
            position = event.pos()

            for piece in pieces:
                newLabel = DragLabel(piece, self)
                newLabel.move(position)
                newLabel.show()

                position += QPoint(newLabel.width(), 0)

            event.acceptProposedAction()
        else:
            event.ignore()
Example #15
0
    def pushButton_save_clicked(self):
        """ Slot : Activate the save operation
        """
        # If there where no changes - return
        if not self.mainItem.dirty:
            QMessageBox.critical(None, "Character Identifier - Save",
                                 "Nothing to save")
            return

        # Get the previous filename and path
        path = QFileInfo(
            self.filename).path() if self.filename else os.path.join(
                dataDir, "Chapter 3 - Distance Metrics")
        fname = QFileDialog.getSaveFileName(
            self, "Character Identifier - Save", path,
            "Character Identifier Files (*.chr)")

        # If the user pressed the cancel button in the dialog - return
        if not fname:
            return
        if not fname[0].lower().endswith(".chr"):
            fname[0] += ".chr"
        self.filename = fname[0]

        try:
            # Open the file create the stream and activate the save method of the
            # main item
            fh = QFile(self.filename)
            if not fh.open(QIODevice.WriteOnly):
                raise IOError(fh.errorString())
            stream = QDataStream(fh)
            self.mainItem.save(stream, self.filename)

        except IOError as e:
            QMessageBox.warning(
                self, "Character Identifier -- Save Error",
                "Failed to save {}: {}".format(self.filename, e))
        finally:
            if fh is not None:
                fh.close()
Example #16
0
    def readFromServer(self):
        stream = QDataStream(self)
        stream.setVersion(QDataStream.Qt_4_9)

        while True:
            if self.nextBlockSize == 0:
                if self.bytesAvailable() < self.SIZEOF_UINT32:
                    break
                self.nextBlockSize = stream.readUInt32()
            if self.bytesAvailable() < self.nextBlockSize:
                break

            header = stream.readUInt32()
            print("header", header)
            if header == 0:  # QString
                textFromServer = stream.readQString()

                # print("messageReceived:", textFromServer)
                print(f"received '{textFromServer}' from Server")

                self.messageReceived.emit("[RECEIVED] " + textFromServer)
                self.nextBlockSize = 0
Example #17
0
    def showMessage(self):
        stream = QDataStream(
            self.tcpSocket)  # 发送数据是以QByteArray数据类型发送过来的,所以接收数据也应该以此接收
        stream.setVersion(QDataStream.Qt_5_10)  # 发送和接收数据以相同的编码形式传输
        self.message = stream.readQString(
        )  # 写入使用writeString, 对应读取使用readQString
        self.ui.showText.append(
            '%s   %s' %
            (self.message,
             time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))))
        message_list = self.message.split(',')

        self.radio = message_list[3][3:]
        self.x1 = message_list[4][3:]
        self.y1 = message_list[5][3:]
        self.x2 = message_list[6][3:]
        self.y2 = message_list[7][3:]

        self.R = message_list[-3][3:]
        self.G = message_list[-2][3:]
        self.B = message_list[-1][3:]
        print(message_list)
Example #18
0
 def load(self):
     exception = None
     fh = None
     try:
         if not self.filename:
             raise IOError("no filename specified for loading")
         fh = QFile(self.filename)
         if not fh.open(QIODevice.ReadOnly):
             raise IOError(str(fh.errorString()))
         stream = QDataStream(fh)
         magic = stream.readInt32()
         if magic != MAGIC_NUMBER:
             raise IOError("unrecognized file type")
         fileVersion = stream.readInt16()
         if fileVersion != FILE_VERSION:
             raise IOError("unrecognized file type version")
         self.ships = {}
         while not stream.atEnd():
             name = ""
             owner = ""
             country = ""
             description = ""
             name = stream.readQString()
             owner = stream.readQString()
             country = stream.readQString()
             description = stream.readQString()
             teu = stream.readInt32()
             ship = Ship(name, owner, country, teu, description)
             self.ships[id(ship)] = ship
             self.owners.add(str(owner))
             self.countries.add(str(country))
         self.dirty = False
     except IOError as e:
         exception = e
     finally:
         if fh is not None:
             fh.close()
         if exception is not None:
             raise exception
Example #19
0
    def decode_data(self, bytearray):
        data = []
        item = {}

        ds = QDataStream(bytearray)
        while not ds.atEnd():

            row = ds.readInt32()
            column = ds.readInt32()

            map_items = ds.readInt32()
            for i in range(map_items):

                key = ds.readInt32()

                value = QVariant()
                ds >> value
                item[Qt.ItemDataRole(key)] = value

            data.append(item)

        return data
Example #20
0
    def mousePressEvent(self, event):
        square = self.targetSquare(event.pos())
        found = self.findPiece(square)

        if found == -1:
            return

        location = self.pieceLocations[found]
        pixmap = self.piecePixmaps[found]
        del self.pieceLocations[found]
        del self.piecePixmaps[found]
        del self.pieceRects[found]

        if location == QPoint(square.x() / 80, square.y() / 80):
            self.inPlace -= 1

        self.update(square)

        itemData = QByteArray()
        dataStream = QDataStream(itemData, QIODevice.WriteOnly)

        dataStream << pixmap << location

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

        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(event.pos() - square.topLeft())
        drag.setPixmap(pixmap)

        if drag.exec_(Qt.MoveAction) != Qt.MoveAction:
            self.pieceLocations.insert(found, location)
            self.piecePixmaps.insert(found, pixmap)
            self.pieceRects.insert(found, square)
            self.update(self.targetSquare(event.pos()))

            if location == QPoint(square.x() / 80, square.y() / 80):
                self.inPlace += 1
Example #21
0
    def mousePressEvent(self, event):
        itemData = QByteArray()
        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
        dataStream << QByteArray(
            self.labelText) << QPoint(event.pos() - self.rect().topLeft())

        mimeData = QMimeData()
        mimeData.setData('application/x-fridgemagnet', itemData)
        mimeData.setText(self.labelText)

        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(event.pos() - self.rect().topLeft())
        drag.setPixmap(self.pixmap())

        self.hide()

        if drag.exec_(Qt.MoveAction | Qt.CopyAction,
                      Qt.CopyAction) == Qt.MoveAction:
            self.close()
        else:
            self.show()
Example #22
0
 def open(self):
     self.offerSave()
     path = (QFileInfo(self.filename).path()
             if self.filename else ".")
     fname,filetype = QFileDialog.getOpenFileName(self,
             "Page Designer - Open", path,
             "Page Designer Files (*.pgd)")
     if not fname:
         return
     self.filename = fname
     fh = None
     try:
         fh = QFile(self.filename)
         if not fh.open(QIODevice.ReadOnly):
             raise IOError(str(fh.errorString()))
         items = self.scene.items()
         while items:
             item = items.pop()
             self.scene.removeItem(item)
             del item
         self.addBorders()
         stream = QDataStream(fh)
         stream.setVersion(QDataStream.Qt_5_7)
         magic = stream.readInt32()
         if magic != MagicNumber:
             raise IOError("not a valid .pgd file")
         fileVersion = stream.readInt16()
         if fileVersion != FileVersion:
             raise IOError("unrecognised .pgd file version")
         while not fh.atEnd():
             self.readItemFromStream(stream)
     except IOError as e:
         QMessageBox.warning(self, "Page Designer -- Open Error",
                 "Failed to open {0}: {1}".format(self.filename, e))
     finally:
         if fh is not None:
             fh.close()
     global Dirty
     Dirty = False
Example #23
0
    def dropEvent(self, event):
        if event.mimeData().hasFormat('application/x-dnditemdata'):
            itemData = event.mimeData().data('application/x-dnditemdata')
            dataStream = QDataStream(itemData, QIODevice.ReadOnly)

            pixmap = QPixmap()
            offset = QPoint()
            dataStream >> pixmap >> offset

            newIcon = QLabel(self)
            newIcon.setPixmap(pixmap)
            newIcon.move(event.pos() - offset)
            newIcon.show()
            newIcon.setAttribute(Qt.WA_DeleteOnClose)

            if event.source() == self:
                event.setDropAction(Qt.MoveAction)
                event.accept()
            else:
                event.acceptProposedAction()
        else:
            event.ignore()
Example #24
0
    def write(self, map, fileName):
        collisionLayer = None
        for layer in map.layers():
            if layer.name().lower() == "collision":
                tileLayer = layer.asTileLayer()
                if tileLayer:
                    if (collisionLayer) :
                        self.mError = self.tr("Multiple collision layers found!")
                        return False
                    
                    collisionLayer = tileLayer

        
        if (not collisionLayer) :
            self.mError = self.tr("No collision layer found!")
            return False
        
        file = QSaveFile(fileName)
        if (not file.open(QIODevice.WriteOnly)) :
            self.mError = self.tr("Could not open file for writing.")
            return False
        
        width = collisionLayer.width()
        height = collisionLayer.height()
        stream = QDataStream(file)
        stream.setByteOrder(QDataStream.LittleEndian)
        stream.writeInt16(width&0xffff)
        stream.writeInt16(height&0xffff)
        for y in range(0, height):
            for x in range(0, width):
                tile = collisionLayer.cellAt(x, y).tile
                stream.writeInt8(int(tile and tile.id()> 0)&0xff)

        if not file.commit():
            self.mError = file.errorString()
            return False

        return True
    def run(self):
        self.mutex.lock()
        serverName = self.hostName
        serverPort = self.port
        self.mutex.unlock()

        while not self.quit:
            Timeout = 5 * 1000

            socket = 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 = QDataStream(socket)
            instr.setVersion(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.readQString()
            self.newFortune.emit(fortune)

            self.cond.wait(self.mutex)
            serverName = self.hostName
            serverPort = self.port
            self.mutex.unlock()
Example #26
0
    def _on_drop(self, event):
        """
        Adds to graph contents read from MIME data from drop event.

        Note that new vertices are added centered at current mouse position.

        :type event: QDropEvent
        """
        data = event.mimeData().data(constants.QGRAPH_DD_MIME_TYPE)
        if not data.isNull():
            data_stream = QDataStream(data, QIODevice.ReadOnly)
            parsed = json.loads(data_stream.readString().decode('utf8'))

            # Refer to `mime.py` for docs about format
            version = parsed['version']
            if version == 1:
                x = event.pos().x()
                y = event.pos().y()

                vertices = parsed.get('vertices', [])
                for v in vertices:
                    self.api.insert_vertex(
                        x=x + v['dx'] - v['width'] // 2,
                        y=y + v['dy'] - v['height'] // 2,
                        width=v['width'],
                        height=v['height'],
                        label=v['label'],
                        style=v.get('style', None),
                        tags=v.get('tags', {}),
                    )
            else:
                raise ValueError(
                    "Unsupported version of QmxGraph MIME data: {}".format(
                        version))

            event.acceptProposedAction()
        else:
            event.ignore()
Example #27
0
 def loadQDataStream(self):
     error = None
     fh = None
     try:
         fh = QFile(self.__fname)
         if not fh.open(QIODevice.ReadOnly):
             raise IOError(unicode(fh.errorString()))
         stream = QDataStream(fh)
         magic = stream.readInt32()
         if magic != MovieContainer.MAGIC_NUMBER:
             raise IOError("unrecognized file type")
         version = stream.readInt32()
         if version < MovieContainer.FILE_VERSION:
             raise IOError("old and unreadable file format")
         elif version > MovieContainer.FILE_VERSION:
             raise IOError("new and unreadable file format")
         stream.setVersion(QDataStream.Qt_4_2)
         self.clear(False)
         while not stream.atEnd():
             title = QString()
             acquired = QDate()
             notes = QString()
             stream >> title
             year = stream.readInt16()
             minutes = stream.readInt16()
             stream >> acquired >> notes
             self.add(Movie(title, year, minutes, acquired, notes))
     except (IOError, OSError) as e:
         error = "Failed to load: {0}".format(e)
     finally:
         if fh is not None:
             fh.close()
         if error is not None:
             return False, error
         self.__dirty = False
         return True, "Loaded {0} movie records from {1}".format(
             len(self.__movies),
             QFileInfo(self.__fname).fileName())
Example #28
0
   def __iniRead(self):    ##开始写文件操作
      if not QFile.exists(self.__testFileName):
         QMessageBox.critical(self,"错误","文件不存在")
         return False
      
      self.fileDevice=QFile(self.__testFileName)   #创建文件对象
      if  not self.fileDevice.open(QIODevice.ReadOnly):
         del self.fileDevice    #删除对象
         return False

      self.fileStream=QDataStream(self.fileDevice)

      self.fileStream.setVersion(QDataStream.Qt_5_12)    #设置版本号,写入和读取的版本号要兼容
      if self.ui.radio_BigEndian.isChecked():
         self.fileStream.setByteOrder(QDataStream.BigEndian)
      else:
         self.fileStream.setByteOrder(QDataStream.LittleEndian)

      if self.ui.radio_Single.isChecked():   #必须要设置,float和double都按照这个精度
         self.fileStream.setFloatingPointPrecision(QDataStream.SinglePrecision)
      else:
         self.fileStream.setFloatingPointPrecision(QDataStream.DoublePrecision)
      return True
Example #29
0
def create_qt_mime_data(data):
    """
    Creates a Qt's MIME data object for data in valid QmxGraph's drag&drop
    format.

    :param dict data: Contents of MIME data.
    :rtype: QMimeData
    :return: MIME data in QmxGraph format.
    """
    from PyQt5.QtCore import QByteArray, QDataStream, QIODevice, QMimeData
    item_data = QByteArray()
    data_stream = QDataStream(item_data, QIODevice.WriteOnly)

    qgraph_mime = {
        'version': qmxgraph.constants.QGRAPH_DD_MIME_VERSION,
    }
    qgraph_mime.update(data)
    data_stream.writeString(json.dumps(qgraph_mime).encode('utf8'))

    mime_data = QMimeData()
    mime_data.setData(qmxgraph.constants.QGRAPH_DD_MIME_TYPE, item_data)

    return mime_data
Example #30
0
    def send_msg(self):
        block = QByteArray()
        # QDataStream class provides serialization of binary data to a QIODevice
        out = QDataStream(block, QIODevice.ReadWrite)
        # We are using PyQt5 so set the QDataStream version accordingly.
        out.setVersion(QDataStream.Qt_5_0)
        out.writeUInt16(0)
        text_box_msg = self.textbox.text()
        to = ""
        msg = ""
        if "@" not in text_box_msg:
            print(
                "TO whom should I send a message? use e.g. @all Hello all or @Max Hello max"
            )
            return
        else:
            to, msg = text_box_msg.split(' ',
                                         1)[0], text_box_msg.split(' ', 1)[1]
            to = to.replace("@", "")

        # get a byte array of the message encoded appropriately.
        message = bytes(msg, encoding='ascii')
        # now use the QDataStream and write the byte array to it.
        out.writeString(message)
        out.device().seek(0)
        out.writeUInt16(block.size() - 2)
        aaa = True
        if to == "all":
            for conn in self.clientConnections:
                conn["conn"].write(block)
        else:
            for conn in self.clientConnections:
                if conn["name"] == to:
                    conn["conn"].write(block)
                    aaa = False
        if aaa:
            print("Sry I server could not send message to", to)