def _drop_files_to_virtual(self, action, mime_data, parent) -> bool: """ Drop files into virtual folder :param: action - DROP_COPY_FILE or DROP_MOVE_FILE :param: mime_data - list of files to be dropped, created in ProxyModel2.mimeData :param: parent - virtual folder where to drop :return: """ parent_dir_id = self.data(parent, role=Qt.UserRole).dir_id mime_format = mime_data.formats() # ('REAL_FOLDER', 'VIRTUAL_FOLDER', 'REAL_FILE', 'VIRTUAL_FILE') drop_data = mime_data.data(mime_format[0]) stream = QDataStream(drop_data, QIODevice.ReadOnly) count = stream.readInt() folder_type = 0 for _ in range(count): file_id = stream.readInt() folder_type = stream.readInt() if action == DROP_COPY_FILE: ut.insert_other('VIRTUAL_FILE', (parent_dir_id, file_id)) elif folder_type > 0: # DROP_MOVE_FILE ut.update_other('VIRTUAL_FILE_MOVE', (parent_dir_id, folder_type, file_id)) if action == DROP_MOVE_FILE: # update file list after moving files self.caller.files_virtual_folder(folder_type) return folder_type != -1
def _drop_files_to_virtual(self, action, mime_data, parent): parent_dir_id = self.data(parent, role=Qt.UserRole).dir_id mime_format = mime_data.formats() drop_data = mime_data.data(mime_format[0]) stream = QDataStream(drop_data, QIODevice.ReadOnly) count = stream.readInt() fav_id = 0 for _ in range(count): file_id = stream.readInt() # dir_id = stream.readInt() # may be restored, if copy/move from real folder fav_id = stream.readInt() if action == DropCopyFile: Shared['DB utility'].insert_other('VIRTUAL_FILE', (parent_dir_id, file_id)) else: if fav_id > 0: Shared['DB utility'].update_other( 'VIRTUAL_FILE_MOVE', (parent_dir_id, fav_id, file_id)) if action == DropMoveFile: # update file list after moving files Shared['Controller'].files_virtual_folder(fav_id) return (fav_id != -1)
def fromfile(cls, path): """Read a bloom filter from file-object `f' serialized with ``BloomFilter.tofile''. """ f = QFile(path) if not f.open(QIODevice.ReadOnly): raise ValueError("unable to open file " + path) data = QDataStream(f) file_fmt = data.readBytes() if file_fmt != cls.FILE_FMT: raise ValueError('unexpected file format') error_rate = data.readFloat() num_slices = data.readInt() bits_per_slice = data.readInt() capacity = data.readInt() count = data.readInt() bitarray = QBitArray() filter = cls(1) # Bogus instantiation, we will `_setup'. filter._setup(error_rate, num_slices, bits_per_slice, capacity, count) filter.bitarray = QBitArray() data >> filter.bitarray return filter
def readResponse(self): # 收命令,要做的事情, stream = QDataStream(self.socket) print('--------------------') print('服务器响应') stream.setVersion(QDataStream.Qt_5_7) while True: self.nextBlockSize = 0 if self.nextBlockSize == 0: if self.socket.bytesAvailable() < SIZEOF_UINT16: print('没有内容了') break self.nextBlockSize = stream.readUInt16() else: print('错误') # 客户端主动断开时,去掉字典中的对应,在这里做一部分操作。 # 客户端主动断开的时候,要将其从self.myParent.sockeIdToSocketDict self.myParent.fixIdToSocketIdDict 中删掉 break if self.socket.bytesAvailable() < self.nextBlockSize: print("错误2") if (not self.socket.waitForReadyRead(60000) or self.socket.bytesAvailable() < self.nextBlockSize): break state = stream.readQString() # 读命令 sendModel print('state==' + state) if state == 'SENDFILE': filename = stream.readQString() # 读文件名 fileSize = stream.readInt() # 读文件大小 with open('../TEST/' + filename, 'ab') as f: while self.nextBlockSize > 0: fileBytes = stream.readBytes() # 读文件部分字节 f.write(fileBytes) print(fileBytes.__len__()) self.nextBlockSize = stream.readUInt64() print('self.nextBlockSize:' + str(self.nextBlockSize)) state = stream.readQString() filename = stream.readQString() # 读文件名 fileSize = stream.readInt() # 读文件大小 print('filename:' + filename) print('fileSize:' + str(fileSize)) elif state == 'test': print(stream.readQString()) elif state == 'ORDER': # 收到一条命令 要执行的命令 order = stream.readQString() # 读是什么命令 if order: # shou dao doThing self.doSomeThing.emit(order)
def onDrop(self, event): print("on Drop") if event.mimeData().hasFormat(LISTBOX_MIMETYPE): eventData = event.mimeData().data(LISTBOX_MIMETYPE) dataStream = QDataStream(eventData, QIODevice.ReadOnly) # pixmap = QPixmap() # dataStream >> pixmap op_code = dataStream.readInt() text = dataStream.readQString() mouse_position = event.pos() scene_position = self.scene.grScene.views()[0].mapToScene( mouse_position) print("GOT DROP: [%d] '%s'" % (op_code, text), "mouse:", mouse_position, "scene:", scene_position) node = Node(self.scene, text, inputs=[1], outputs=[1]) node.setPos(scene_position.x(), scene_position.y()) self.scene.addNode(node) event.setDropAction(Qt.MoveAction) event.accept() else: # print(" ... drop ignored, not requested format '%s'" % LISTBOX_MIMETYPE) event.ignore()
def onDrop(self, event: QDropEvent): if DEBUG: print('CalcSubWnd : onDrop') print(event.mimeData().text()) if event.mimeData().hasFormat(LISTBOX_MIMETYPE): eventData = event.mimeData().data(LISTBOX_MIMETYPE) dataStream = QDataStream(eventData, QIODevice.ReadOnly) pixmap = QPixmap() dataStream >> pixmap op_code = dataStream.readInt() text = dataStream.readQString() mouse_pos = event.pos() scene_pos = self.scene.grScene.views()[0].mapToScene(mouse_pos) if DEBUG: print(f'DROP: {op_code} {text} at {scene_pos}') try: node = get_call_from_opcode(op_code)(self.scene) node.setPos(scene_pos.x(), scene_pos.y()) self.scene.history.storeHistory('Create node {}'.format(node.__class__.__name__)) except Exception as e: dumpException(e) event.setDropAction(Qt.MoveAction) event.accept() else: if DEBUG: print(' ... drop ignored, not requested format ', LISTBOX_MIMETYPE) event.ignore()
def onDisposed(self, datagram): if datagram.size() == 0: return block = self._unescape(datagram) istream = QDataStream(block) istream.setVersion(QDataStream.Qt_4_8) magic = istream.readQString() response = istream.readQString() if istream.status() == QDataStream.Ok: if response == "extendedData": self._extendedDataCategory = istream.readQString() self._extendedDataCompressed = istream.readBool() self._extendedDataSize = istream.readInt() self._extendedDataBuffer.clear() else: handled = False for delegate in self._delegates: if hasattr(delegate, response): getattr(delegate, response)(istream) handled = True if istream.status() != QDataStream.Ok: print("{}: eeeeeeeeeeeeee".format(response)) break if not handled: print("Unhandled response:", response) else: print("onDisposed failed: block size", block.size())
def ReadFile(self): file = QFile("./doc/test.txt") #创建文件对象 isok = file.open(QIODevice.ReadOnly) #以只写的方式打开文件对象 if isok: stream = QDataStream(file) #创建数据流,和文件对象关联 str = stream.readQString() #读的时候按写的顺序取 num = stream.readInt() print(str) print(num) file.close()
def load(self, device): self.m_frames = [] stream = QDataStream(device) self.m_name = stream.readQString() frameCount = stream.readInt() for i in range(frameCount): nodeCount = stream.readInt() frame = Frame() frame.setNodeCount(nodeCount) for j in range(nodeCount): pos = QPointF() stream >> pos frame.setNodePos(j, pos) self.m_frames.append(frame)
def dropMimeData(self, data, action, row, column, parent): if (action == Qt.IgnoreAction): return True if (column > 0): return False beginRow = 0 if (row != -1): beginRow = row elif parent.isValid(): beginRow = parent.row() else: beginRow = self.mFrames.size() newFrames = QVector() if (data.hasFormat(FRAMES_MIMETYPE)): encodedData = data.data(FRAMES_MIMETYPE) stream = QDataStream(encodedData, QIODevice.ReadOnly) while (not stream.atEnd()): frame = Frame() frame.tileId = stream.readInt() frame.duration = stream.readInt() newFrames.append(frame) elif (data.hasFormat(TILES_MIMETYPE)): encodedData = data.data(TILES_MIMETYPE) stream = QDataStream(encodedData, QIODevice.ReadOnly) while (not stream.atEnd()): frame = Frame() frame.tileId = stream.readInt() frame.duration = FrameListModel.DEFAULT_DURATION newFrames.append(frame) if (newFrames.isEmpty()): return False self.beginInsertRows(QModelIndex(), beginRow, beginRow + newFrames.size() - 1) self.mFrames.insert(beginRow, newFrames.size(), Frame()) for i in range(newFrames.size()): self.mFrames[i + beginRow] = newFrames[i] self.endInsertRows() return True
def _drop_folders(self, action, mime_data, parent): mime_format = mime_data.formats()[0] drop_data = mime_data.data(mime_format) stream = QDataStream(drop_data, QIODevice.ReadOnly) idx_count = stream.readInt() for _ in range(idx_count): tmp_str = stream.readQString() id_list = (int(i) for i in tmp_str.split(',')) index = self._restore_index(id_list) if action == DropMoveFolder: self._move_folder(index, parent) else: self._copy_folder(index, parent) return True
def dropEvent(self, event): formats = event.mimeData().formats() if "application/x-qabstractitemmodeldatalist" in formats: encoded = event.mimeData().data( "application/x-qabstractitemmodeldatalist") stream = QDataStream(encoded, QIODevice.ReadOnly) while not stream.atEnd(): row = stream.readInt() col = stream.readInt() data = stream.readQVariantMap() self.setText(data[""]) elif "text/uri-list" in formats: urls = event.mimeData().urls() if urls: self.setText(urls[0].toLocalFile())
def dropEvent(self, event): # Decode mimedata information about the drag&drop event, since only # internal movement are allowed we assume the data format is correct data = event.mimeData().data('application/x-qabstractitemmodeldatalist') stream = QDataStream(data, QIODevice.ReadOnly) # Get the starting-item row start_index = stream.readInt() new_index = self.indexAt(event.pos()).row() if not 0 <= new_index <= len(self._model): new_index = len(self._model) if qApp.keyboardModifiers() == Qt.ControlModifier: cue = self._model.item(start_index) new_cue = CueFactory.clone_cue(cue) self._model.insert(new_cue, new_index) else: self._model.move(start_index, new_index)
def add_from_filemanager(self, drag_event): """ Adds a timeable when item from filemanager is dragged into the track """ # get the path from the dropped item item_data = drag_event.mimeData().data('ubicut/file') stream = QDataStream(item_data, QIODevice.ReadOnly) path = QDataStream.readString(stream).decode() width = QDataStream.readInt(stream) x_pos = drag_event.pos().x() # check if theres already another timeable at the drop position rect = QRectF(x_pos, 0, width, self.height) colliding = self.scene().items(rect) # add the timeable when there are no colliding items if not colliding: name = os.path.basename(path) clip_id = generate_id() if Settings.get_instance().get_dict_settings()["general"]["autoaudio"]["current"]: model = TimeableModel(path, generate_id(), is_video=True) model.move(x_pos) model.set_end(width) self.__controller.create_timeable(self.num, name, width, x_pos, model, clip_id, is_drag=True) model_audio = TimeableModel(path, generate_id(), is_video=False) model_audio.move(x_pos) model_audio.set_end(width) clip_id_audio = generate_id() self.__controller.create_timeable(None, name, width, x_pos, model_audio, clip_id_audio, is_drag=True, auto_audio=self.num) self.__controller.create_group([clip_id, clip_id_audio]) else: model_withoutgroup = TimeableModel(path, generate_id()) model_withoutgroup.move(x_pos) model_withoutgroup.set_end(width) self.__controller.create_timeable(self.num, name, width, x_pos, model_withoutgroup, clip_id, is_drag=True) self.item_dropped = True
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
def decodePack2Txt(in1, out1, dem='\t'): dsoIn = QFile(in1) if dsoIn.open(QIODevice.ReadOnly) is False: return OTdic = {} for it in otypedic: if str(otypedic[it]) not in OTdic: OTdic[str(otypedic[it])] = it dsoIn.seek(0) dsoInStream = QDataStream(dsoIn) dsoInStream.setVersion(QDataStream.Qt_5_2) print(dsoInStream.readQString()) print(dsoInStream.readQString()) lines = [] while dsoIn.atEnd() is False: id = dsoInStream.readInt() raRad = dsoInStream.readFloat() decRad = dsoInStream.readFloat() bMag = dsoInStream.readFloat() vMag = dsoInStream.readFloat() nType = dsoInStream.readInt() mType = dsoInStream.readQString() majorAxisSize = dsoInStream.readFloat() minorAxisSize = dsoInStream.readFloat() orientationAngle = dsoInStream.readInt() z = dsoInStream.readFloat() zErr = dsoInStream.readFloat() plx = dsoInStream.readFloat() plxErr = dsoInStream.readFloat() dist = dsoInStream.readFloat() distErr = dsoInStream.readFloat() NGC = dsoInStream.readInt() IC = dsoInStream.readInt() M = dsoInStream.readInt() C = dsoInStream.readInt() B = dsoInStream.readInt() Sh2 = dsoInStream.readInt() VdB = dsoInStream.readInt() RCW = dsoInStream.readInt() LDN = dsoInStream.readInt() LBN = dsoInStream.readInt() Cr = dsoInStream.readInt() Mel = dsoInStream.readInt() PGC = dsoInStream.readInt() UGC = dsoInStream.readInt() Ced = dsoInStream.readQString() Arp = dsoInStream.readInt() VV = dsoInStream.readInt() PK = dsoInStream.readQString() PNG = dsoInStream.readQString() SNRG = dsoInStream.readQString() ACO = dsoInStream.readQString() HCG = dsoInStream.readQString() ESO = dsoInStream.readQString() VdBH = dsoInStream.readQString() DWB = dsoInStream.readInt() Tr = dsoInStream.readInt() St = dsoInStream.readInt() Ru = dsoInStream.readInt() VdBHa = dsoInStream.readInt() ra = float(raRad * 180 / math.pi) dec = float(decRad * 180 / math.pi) majorAxisSize *= 60 minorAxisSize *= 60 if str(nType) in OTdic: oType = OTdic[str(nType)] lis = [ id, ra, dec, bMag, vMag, oType, mType, majorAxisSize, minorAxisSize, orientationAngle, z, zErr, plx, plxErr, dist, distErr, NGC, IC, M, C, B, Sh2, VdB, RCW, LDN, LBN, Cr, Mel, PGC, UGC, Ced, Arp, VV, PK, PNG, SNRG, ACO, HCG, ESO, VdBH, DWB, Tr, St, Ru, VdBHa ] lis = list(str(x) for x in lis) lines.append(dem.join(lis)) writealllines(lines, out1)
class SendStream: def __init__(self, data : bytes = b''): self.byteArray = QByteArray(data) self.buffer = QBuffer(self.byteArray) self.buffer.open(QBuffer.ReadOnly if data else QBuffer.WriteOnly) self.stream = QDataStream(self.buffer) def atEnd(self): return self.stream.atEnd() def data(self): return self.byteArray.data() def clear(self): self.buffer.reset() self.byteArray.resize(0) def send(self, tcpSocket : QTcpSocket): writeInt(tcpSocket, len(self.byteArray)) tcpSocket.write(self.byteArray) def writeBytes(self, data: bytes): self.buffer.write(b'\xFE') self.stream.writeBytes(data) def readBytes(self): controlByte = self.buffer.read(1) if controlByte != b'\xFE': raise Exception('Failed to read bytes from stream') return self.stream.readBytes() def writeString(self, s: str): self.buffer.write(b'\xFD') self.stream.writeBytes(s.encode()) def readString(self): controlByte = self.buffer.read(1) if controlByte != b'\xFD': raise Exception('Failed to read string from stream.') return self.stream.readBytes().decode() def writeInt(self, i: int): self.buffer.write(b'\xFC') self.stream.writeInt(i) def readInt(self): controlByte = self.buffer.read(1) if controlByte != b'\xFC': raise Exception('Failed to read int from stream.') return self.stream.readInt() def writeBool(self, b: bool): self.buffer.write(b'\xFB' if b else b'\xFA') def readBool(self): b = self.buffer.read(1) if b == b'\xFB': return True elif b == b'\xFA': return False else: raise Exception('Failed to read bool from stream')
class QmyMainWindow(QMainWindow): def __init__(self, parent=None): super().__init__(parent) #调用父类构造函数,创建窗体 self.ui=Ui_MainWindow() #创建UI对象 self.ui.setupUi(self) #构造UI界面 self.ui.groupBox.setEnabled(False) self.ui.actSaveALL.setEnabled(False) self.ui.actReadALL.setEnabled(False) self.setWindowTitle("二进制文件流化读写") self.__testFileName="" #测试用文件的文件名 ## ==============自定义功能函数============ 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) ##必须要设置精度,float和double都按照这个精度 precision=QDataStream.DoublePrecision if self.ui.radio_Single.isChecked(): precision=QDataStream.SinglePrecision self.fileStream.setFloatingPointPrecision(precision) return True def __delFileStream(self): ##结束写文件操作 self.fileDevice.close() del self.fileStream del self.fileDevice 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) ##必须要设置精度,float和double都按照这个精度 precision=QDataStream.DoublePrecision if self.ui.radio_Single.isChecked(): precision=QDataStream.SinglePrecision self.fileStream.setFloatingPointPrecision(precision) return True ## ==========由connectSlotsByName() 自动连接的槽函数================== @pyqtSlot() ##选择测试用文件 def on_btnFile_clicked(self): curPath=QDir.currentPath() #当前目录 title="选择文件" #对话框标题 filt="流数据文件(*.stream)" #文件过滤器 fileName,flt=QFileDialog.getSaveFileName(self,title,curPath,filt) if (fileName == ""): return self.__testFileName=fileName #测试用文件 self.ui.editFilename.setText(fileName) self.ui.groupBox.setEnabled(True) self.ui.actSaveALL.setEnabled(True) self.ui.actReadALL.setEnabled(True) @pyqtSlot() ##写 int8 def on_btnInt8_Write_clicked(self): Value=self.ui.spin_Int8.value() #Python int if self.__iniWrite(): try: self.fileStream.writeInt8(Value) except Exception as e: QMessageBox.critical(self, "writeInt8()出现错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 int8 def on_btnInt8_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readInt8() self.ui.edit_Int8.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写 uint8 def on_btnUInt8_Write_clicked(self): Value=self.ui.spin_UInt8.value() if self.__iniWrite(): try: self.fileStream.writeUInt8(Value) except Exception as e: QMessageBox.critical(self, "writeUInt8()出现错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 uint8 def on_btnUInt8_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readUInt8() self.ui.edit_UInt8.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写int16 def on_btnInt16_Write_clicked(self): Value=self.ui.spin_Int16.value() #Python的int if self.__iniWrite(): try: self.fileStream.writeInt16(Value) #以int16类型写入文件 except Exception as e: QMessageBox.critical(self, "writeInt16()发生错误", str(e)) finally: self.__delFileStream() ## print("finally被执行") @pyqtSlot() ##读 int16 def on_btnInt16_Read_clicked(self): if self.__iniRead(): try: Value=self.fileStream.readInt16() self.ui.edit_Int16.setText("%d"%Value) except Exception as e: QMessageBox.critical(self, "readInt16()发生错误", str(e)) finally: self.__delFileStream() ## print("finally被执行") @pyqtSlot() ##写 uint16 def on_btnUInt16_Write_clicked(self): Value=self.ui.spin_UInt16.value() if self.__iniWrite(): try: self.fileStream.writeUInt16(Value) except Exception as e: QMessageBox.critical(self, "writeUInt16()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 uint16 def on_btnUIn16_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readUInt16() self.ui.edit_UInt16.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写 int32 def on_btnInt32_Write_clicked(self): Value=self.ui.spin_Int32.value() if self.__iniWrite(): try: self.fileStream.writeInt32(Value) except Exception as e: QMessageBox.critical(self, "writeInt32()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 int32 def on_btnInt32_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readInt32() self.ui.edit_Int32.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写 int64 def on_btnInt64_Write_clicked(self): Value=self.ui.spin_Int64.value() if self.__iniWrite(): try: self.fileStream.writeInt64(Value) except Exception as e: QMessageBox.critical(self, "writeInt64()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 int64 def on_btnInt64_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readInt64() self.ui.edit_Int64.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写 int def on_btnInt_Write_clicked(self): Value=self.ui.spin_Int.value() if self.__iniWrite(): try: self.fileStream.writeInt(Value) except Exception as e: QMessageBox.critical(self, "writeInt()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 int def on_btnInt_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readInt() self.ui.edit_Int.setText("%d"%Value) self.__delFileStream() @pyqtSlot() ##写 bool def on_btnBool_Write_clicked(self): Value=self.ui.chkBox_In.isChecked() #bool型 if self.__iniWrite(): self.fileStream.writeBool(Value) self.__delFileStream() @pyqtSlot() ##读 bool def on_btnBool_Read_clicked(self): if self.__iniRead(): Value=self.fileStream.readBool() #bool型 self.ui.chkBox_Out.setChecked(Value) self.__delFileStream() @pyqtSlot() ##写 float def on_btnFloat_Write_clicked(self): Value=self.ui.spin_Float.value() if self.__iniWrite(): try: self.fileStream.writeFloat(Value) except Exception as e: QMessageBox.critical(self, "writeFloat()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 float def on_btnFloat_Read_clicked(self): if self.__iniRead(): try: Value=self.fileStream.readFloat() self.ui.edit_Float.setText("%.4f"%Value) except Exception as e: QMessageBox.critical(self, "writeFloat()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##写 double def on_btnDouble_Write_clicked(self): Value=self.ui.spin_Double.value() if self.__iniWrite(): try: self.fileStream.writeDouble(Value) except Exception as e: QMessageBox.critical(self, "writeDouble()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 double def on_btnDouble_Read_clicked(self): if self.__iniRead(): try: Value=self.fileStream.readDouble() self.ui.edit_Double.setText("%.4f"%Value) except Exception as e: QMessageBox.critical(self, "readDouble()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##写 QString,与Python的str兼容 def on_btnQStr_Write_clicked(self): Value=self.ui.editQStr_In.text() if self.__iniWrite(): try: self.fileStream.writeQString(Value) except Exception as e: QMessageBox.critical(self, "writeQString()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 QString,与Python的str兼容 def on_btnQStr_Read_clicked(self): if self.__iniRead(): try: Value=self.fileStream.readQString() self.ui.editQStr_Out.setText(Value) except Exception as e: QMessageBox.critical(self, "readQString()发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##写 String def on_btnStr_Write_clicked(self): strV=self.ui.editStr_In.text() #str类型 if self.__iniWrite(): try: bts=bytes(strV,encoding="utf-8") #转换为bytes类型 self.fileStream.writeString(bts) except Exception as e: QMessageBox.critical(self, "写入时发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读 String def on_btnStr_Read_clicked(self): if self.__iniRead(): try: Value=self.fileStream.readString() #bytes类型 strV=Value.decode("utf-8") #从bytes类型解码为字符串,编码utf-8 self.ui.editStr_Out.setText(strV) except Exception as e: QMessageBox.critical(self, "读取时发生错误", str(e)) finally: self.__delFileStream() ##===字体的写入与读取 @pyqtSlot() ##选择字体 def on_btnFont_In_clicked(self): font=self.ui.btnFont_In.font() font,OK=QFontDialog.getFont(font,self) #选择字体 if OK: self.ui.btnFont_In.setFont(font) @pyqtSlot() ##写 QVariant, QFont def on_btnFont_Write_clicked(self): font=self.ui.btnFont_In.font() #QFont类型 if self.__iniWrite(): self.fileStream.writeQVariant(font) #QFont类型 self.__delFileStream() @pyqtSlot() ##读 QVariant, QFont def on_btnFont_Read_clicked(self): if self.__iniRead(): try: font=self.fileStream.readQVariant() #QFont类型 self.ui.editFont_Out.setFont(font) except Exception as e: QMessageBox.critical(self, "读取时发生错误", str(e)) finally: self.__delFileStream() ##===颜色的写入与读取 @pyqtSlot() ##选择颜色 def on_btnColor_In_clicked(self): plet=self.ui.btnColor_In.palette() #QPalette color=plet.buttonText().color() #QColor color= QColorDialog.getColor(color,self) if color.isValid(): plet.setColor(QPalette.ButtonText,color) self.ui.btnColor_In.setPalette(plet) @pyqtSlot() ##写 QVariant, QColor def on_btnColor_Write_clicked(self): plet=self.ui.btnColor_In.palette() color=plet.buttonText().color() #QColor if self.__iniWrite(): self.fileStream.writeQVariant(color) #QColor self.__delFileStream() @pyqtSlot() ##读 QVariant, QColor def on_btnColor_Read_clicked(self): if self.__iniRead(): try: color=self.fileStream.readQVariant() #读取为QColor类型 plet=self.ui.editColor_Out.palette() plet.setColor(QPalette.Text,color) self.ui.editColor_Out.setPalette(plet) except Exception as e: QMessageBox.critical(self, "读取时发生错误", str(e)) finally: self.__delFileStream() @pyqtSlot() ##读出编辑框全清空 def on_actClearOutput_triggered(self): self.ui.edit_Int8.clear() self.ui.edit_UInt8.clear() self.ui.edit_Int16.clear() self.ui.edit_UInt16.clear() self.ui.edit_Int32.clear() self.ui.edit_Int64.clear() self.ui.edit_Int.clear() self.ui.edit_Float.clear() self.ui.edit_Double.clear() font=self.font() self.ui.editFont_Out.setFont(font) plet=self.palette() self.ui.editColor_Out.setPalette(plet) @pyqtSlot() ##连续写入文件 def on_actSaveALL_triggered(self): if not self.__iniWrite(): QMessageBox.critical(self,"错误","为写入打开文件时出错") return #数据写入部分 Value=self.ui.spin_Int8.value() self.fileStream.writeInt8(Value) #int8 Value=self.ui.spin_UInt8.value() self.fileStream.writeUInt8(Value) #uint8 Value=self.ui.spin_Int16.value() self.fileStream.writeInt16(Value) #int16 Value=self.ui.spin_UInt16.value() self.fileStream.writeUInt16(Value) #uint16 Value=self.ui.spin_Int32.value() self.fileStream.writeInt32(Value) #int32 Value=self.ui.spin_Int64.value() self.fileStream.writeInt64(Value) #int64 Value=self.ui.spin_Int.value() self.fileStream.writeInt(Value) #int Value=self.ui.chkBox_In.isChecked() self.fileStream.writeBool(Value) #bool Value=self.ui.spin_Float.value() self.fileStream.writeFloat(Value) #float Value=self.ui.spin_Double.value() self.fileStream.writeDouble(Value) #double str_Value=self.ui.editQStr_In.text() self.fileStream.writeQString(str_Value) #QString str_Value=self.ui.editStr_In.text() #str类型 bts=bytes(str_Value,encoding="utf-8") #转换为bytes类型 self.fileStream.writeString(bts) font=self.ui.btnFont_In.font() self.fileStream.writeQVariant(font) #QFont plet=self.ui.btnColor_In.palette() color=plet.buttonText().color() self.fileStream.writeQVariant(color) #QColor #数据写入完成 self.__delFileStream() QMessageBox.information(self,"消息","数据连续写入完成.") @pyqtSlot() ##连续读取文件 def on_actReadALL_triggered(self): if not self.__iniRead(): QMessageBox.critical(self,"错误","为读取打开文件时出错") return #数据读取部分 Value=self.fileStream.readInt8() #int8 self.ui.edit_Int8.setText("%d"%Value) Value=self.fileStream.readUInt8() #uint8 self.ui.edit_UInt8.setText("%d"%Value) Value=self.fileStream.readInt16() #int16 self.ui.edit_Int16.setText("%d"%Value) Value=self.fileStream.readUInt16() #uint16 self.ui.edit_UInt16.setText("%d"%Value) Value=self.fileStream.readInt32() #int32 self.ui.edit_Int32.setText("%d"%Value) Value=self.fileStream.readInt64() #int64 self.ui.edit_Int64.setText("%d"%Value) Value=self.fileStream.readInt() #int self.ui.edit_Int.setText("%d"%Value) Value=self.fileStream.readBool() #bool self.ui.chkBox_Out.setChecked(Value) Value=self.fileStream.readFloat() #float self.ui.edit_Float.setText("%.4f"%Value) Value=self.fileStream.readDouble() #double self.ui.edit_Double.setText("%.4f"%Value) str_Value=self.fileStream.readQString() #str self.ui.editQStr_Out.setText(str_Value) byteStr=self.fileStream.readString() #bytes str_Value=byteStr.decode("utf-8") #从bytes类型解码为字符串 self.ui.editStr_Out.setText(str_Value) font=self.fileStream.readQVariant() #QFont self.ui.editFont_Out.setFont(font) color=self.fileStream.readQVariant() #QColor plet=self.ui.editColor_Out.palette() plet.setColor(QPalette.Text,color) self.ui.editColor_Out.setPalette(plet) #数据写入完成 self.__delFileStream() QMessageBox.information(self,"消息","数据连续读取完成.")