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(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 = 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(owner) self.countries.add(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
def getMsg(self): self.buffer.append(self.readAll()) totalLen = self.buffer.size() while totalLen: in_ = QDataStream(self.buffer, QIODevice.ReadOnly) in_.setVersion(QDataStream.Qt_5_9) if self.msgLen == 0: if totalLen >= self.headLen: self.msgLen = in_.readInt32() if totalLen >= self.headLen + self.msgLen: msg = "" msg = in_.readQString() self.getMsgSignal.emit(msg) self.buffer = self.buffer.right(totalLen - self.headLen - self.msgLen - 4) self.msgLen = 0 totalLen = self.buffer.size() else: break else: break else: if totalLen >= self.headLen + self.msgLen: in_.readInt32() msg = "" msg = in_.readQString() self.getMsgSignal.emit(msg) self.buffer = self.buffer.right(totalLen - self.headLen - self.msgLen - 4) self.msgLen = 0 totalLen = self.buffer.size() else: break
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 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() #stream >> action >> room action = stream.readQString() room = stream.readQString() if action != "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)) self.responseLabel.setText(msg) self.updateUi() self.nextBlockSize = 0
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.readQString() 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 = NodeFactory.from_op_code(op_code)(self.scene) node.setPos(scene_pos.x(), scene_pos.y()) self.scene.history.storeHistory('Create node {}'.format( node.__class__.__name__)) event.setDropAction(Qt.MoveAction) event.accept() except Exception as e: dumpException(e) else: if DEBUG: print(' ... drop ignored, not requested format ', LISTBOX_MIMETYPE) event.ignore()
def my_readResponse(self): stream = QDataStream(self.socket) while True: if self.nextBlockSize == 0: if self.socket.bytesAvailable() < SIZEOF_UINT16: break self.nextBlockSize = stream.readUInt16() if self.socket.bytesAvailable() < self.nextBlockSize: break ser_reply = stream.readQString() if ser_reply == 'None': QMessageBox.critical(self, '错误提示!', self.tr('您没有开通服务器交易功能!')) rec_text = my_cur_time() + ' 您没有开通服务器交易功能!' self.statusBar().showMessage(rec_text) my_operating_record(rec_text) else: rec_text = my_cur_time() + ' 服务器已接收指令:{0}'.format(ser_reply) self.statusBar().showMessage(rec_text) my_operating_record(rec_text) self.nextBlockSize = 0 self.socket.close() self.my_updateUI() rec_text = my_cur_time() + ' 已断开服务器连接!' my_operating_record(rec_text)
def load_datastream(self, fname): error = None fh = None try: fh = QFile(fname) if not fh.open(QIODevice.ReadOnly): raise IOError(str(fh.errorString())) stream = QDataStream(fh) while not stream.atEnd(): self.label = stream.readQString() self.diameter = stream.readInt32() self.top_elev = stream.readDouble() self.design_load = stream.readDouble() except EnvironmentError as e: error = "Failed to load:{0}".format(e) finally: if fh is not None: fh.close() if error is not None: print(error) self.__dirty = False print("load data from{0}".format(QFileInfo(fname).fileName())) # 缺少计算参数的类
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 readMessage(self): """ 读取文件数据 """ receiver = QDataStream(self.tcpClient) receiver.setVersion(QDataStream.Qt_5_4) if self.bytesReceive <= 2: if self.tcpClient.bytesAvailable() >= 2 and self.fileNameSize == 0: self.TotalBytes = receiver.readInt64() self.fileNameSize = receiver.readInt64() self.bytesReceive += 2 if self.tcpClient.bytesAvailable() >= self.fileNameSize and self.fileNameSize != 0: self.fileName = receiver.readQString() self.bytesReceive += self.fileNameSize if not(self.localFile.open(QFile.WriteOnly)): QMessageBox.warning(self, "应用程序", "无法读取文件 {}:\n {}".format(self.fileName, self.localFile.errorString())) return else: return if self.bytesReceive < self.TotalBytes: self.bytesReceive += self.tcpClient.bytesAvailable() inBlock = self.tcpClient.readAll() self.localFile.write(inBlock) inBlock.resize(0) useTime = self.time.elapsed() / 1000 bytesReceived = self.bytesReceive / (1024*1024) speed = bytesReceived / useTime total = self.TotalBytes / (1024*1024) left = (total - bytesReceived) / speed if bytesReceived < 0.01: bytesReceived = self.bytesReceive / 1024 speed = bytesReceived / useTime / 1024 total = self.TotalBytes / 1024 if left > 0: msg = "已接收 {0:.2f} KB ({1:.2f}KB/s)\n共{2:.2f}KB.已用时:{3:.1f}秒\n估计剩余时间:{4:.1f}秒".format(bytesReceived, speed, total, useTime, left) else: msg = "已接收 {0:.2f} KB ({1:.2f}KB/s)\n共{2:.2f}KB.已用时:{3:.1f}秒\n".format(bytesReceived, speed, total, useTime) else: if left > 0: msg = "已接收 {0:.2f} MB ({1:.2f}MB/s)\n共{2:.2f}MB.已用时:{3:.1f}秒\n估计剩余时间:{4:.1f}秒".format(bytesReceived, speed, total, useTime, left) else: msg = "已接收 {0:.2f} MB ({1:.2f}MB/s)\n共{2:.2f}MB.已用时:{3:.1f}秒\n".format(bytesReceived, speed, total, useTime) self.progressBar.setMaximum(total) self.progressBar.setValue(bytesReceived) self.tcpClientStatuslabel.setText(msg) if self.bytesReceive == self.TotalBytes: self.localFile.close() self.tcpClient.close() self.tcpClientStatuslabel.setText("接收文件{}完毕".format(self.fileName)) self.tcpClientBtn.setEnabled(False)
def read_data(self): for client_id, client_socket in enumerate(self.clients): if client_socket.bytesAvailable() > 0: stream = QDataStream(client_socket) stream.setVersion(QDataStream.Qt_5_9) stream.readUInt32() client_data = stream.readQString() self.return_data_to_clients(client_id, client_data)
def readData(self): instr = QDataStream(self.tcpSocket) data = instr.readQString() #print(data) for i in range(len(data)): if data[i] == "1": self.players[1].keyDown[i] = True else: self.players[1].keyDown[i] = False
def readData(self): instr = QDataStream(self.tcpSocket) data = instr.readQString() #print(data) controls = [False, False, False, False, False] for i in range(len(data)): if data[i] == "1": self.controls2[i] = True else: self.controls2[i] = False
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 dropEvent(self, event: QDropEvent): if event.mimeData().hasFormat('application/x-simitemdata'): item_data = event.mimeData().data('application/x-simitemdata') data_stream = QDataStream(item_data, QIODevice.ReadOnly) s = data_stream.readQString() self.env.add_element_by_name(s, event.pos().x(), event.pos().y()) self.update() event.acceptProposedAction() else: event.ignore()
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
def read_data(self): stream = QDataStream(self.socket) stream.setVersion(QDataStream.Qt_5_9) while True: if self.socket.bytesAvailable() <= 0: break stream.readUInt32() text_from_server = stream.readQString() if self.text_widget: print('display_text') print(text_from_server) self.text_widget.append(text_from_server)
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 _recvResponse(self, socket): data = b"" while not self._stop_event.is_set(): new_data = socket.recv(64) if len(new_data) == 0: break data += new_data block = QByteArray(data) stream = QDataStream(block) stream.setVersion(QDataStream.Qt_4_0) blocksize = stream.readUInt16() resp = stream.readQString() return resp
def receiveMessage(self): print("received smtg") for s in self.connections: if s.bytesAvailable() > 0 : stream = QDataStream(s) stream.setVersion(QDataStream.Qt_4_9) if s.nextBlockSize == 0: if s.bytesAvailable() < SIZEOF_UINT32: return size = stream.readUInt32() print("size", size) s.nextBlockSize = size if s.bytesAvailable() < s.nextBlockSize: return header = stream.readUInt32() print("header", header) if header == 0: # QString textFromClient = stream.readQString() print(f"received '{textFromClient}' from {s}") answer = textFromClient + " Back at you!" if "CLOSE" in textFromClient: self.parent.quit() if header == 1: # QImage img_bytes = stream.readBytes() img = QImage() img.loadFromData(img_bytes) img.save("serverQt.jpg") print(f"received an image from {s}") answer = "image saved in the server on serverQt.jpg" s.nextBlockSize = 0 # BACK AT CLIENT self.sendMessage(answer, s) s.nextBlockSize = 0
def readMessage(self): stream = QDataStream(self.tcpSocket) stream.setVersion(QDataStream.Qt_5_4) while self.tcpSocket.bytesAvailable() > SIZEOF_HEAD_INT: if self.headSize == 0: self.headSize = stream.readInt64() # fileBytes=stream.readInt64() # self.bytesReceive+=SIZEOF_HEAD_INT if self.tcpSocket.bytesAvailable() >= self.headSize: qheader = stream.readQString() # print("client recv head:",qheader) # self.bytesReceive += self.headSize self.handlerMessage(qheader) self.initRecv() else: break
def dropEvent(self, event): if event.mimeData().hasFormat("application/x-icon-and-text"): data = event.mimeData().data("application/x-icon-and-text") stream = QDataStream(data, QIODevice.ReadOnly) text = "" icon = QIcon() text = stream.readQString() stream >> icon self.dropAction = Qt.MoveAction item = QListWidgetItem(text, self) item.setIcon(icon) event.setDropAction(self.dropAction) event.accept() self.update() return self.update() event.ignore()
def slot_receive(self): print("recv") min_block_size = SIZE_OF_UINT16 while self.state() == QAbstractSocket.ConnectedState: stream = QDataStream(self) if self.bytesAvailable() >= min_block_size: nextblock_size = stream.readUInt16() else: break if nextblock_size < min_block_size: break # Event_id = stream.readQString() Event_msg = stream.readQString() print(Event_msg) self.sign_recv.emit(Event_msg)
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 slot_readyRead(self): # 定义最小接受长度 print("come") min_block_size = SIZE_OF_UINT16 while self.state() == QAbstractSocket.ConnectedState: stream = QDataStream(self) # 如果可接受字符串比这个更小就直接丢弃 if self.bytesAvailable() >= min_block_size: # 读取接下来信息流的长度,因为信息流第一个位置写入的是长度,为UInt16类型 nextblock_size = stream.readUInt16() else: break # 如果 nextblock_size 比这个还小说明接受错误 if nextblock_size <= min_block_size: break # event_id = stream.readQString() event_msg = stream.readQString() self.sign_recv.emit(event_msg)
def dropEvent(self, event): if event.mimeData().hasFormat(fridgeMagnetsMimeType()): mime = event.mimeData() itemData = mime.data(fridgeMagnetsMimeType()) dataStream = QDataStream(itemData, QIODevice.ReadOnly) dataStream.startTransaction() text = dataStream.readQString() offset = QPoint() dataStream >> offset newLabel = DragLabel(text, self) newLabel.move(event.pos() - offset) newLabel.show() # Apparently `WA_DeleteOnClose` shouldn't be used with python. # See https://stefanoborini.com/pyqt-gotchas/ # newLabel.setAttribute(Qt.WA_DeleteOnClose) if event.source() == self: event.setDropAction(Qt.MoveAction) event.accept() else: event.acceptProposedAction() elif event.mimeData().hasText(): pieces = event.mimeData().text().split() pos = event.pos() for text in pieces: newLabel = DragLabel(text, self) newLabel.move(pos) newLabel.show() # Apparently `WA_DeleteOnClose` shouldn't be used with python. # See https://stefanoborini.com/pyqt-gotchas/ # newLabel.setAttribute(Qt.WA_DeleteOnClose) pos += QPoint(newLabel.width(), 0) event.acceptProposedAction() else: event.ignore()
def readFortune(self): ins = QDataStream(self.socket) ins.setVersion(QDataStream.Qt_4_0) if self.blockSize == 0: if self.socket.bytesAvailable() < 2: return self.blockSize = ins.readUInt16() if ins.atEnd(): return nextFortune = ins.readQString() if nextFortune == self.currentFortune: QTimer.singleShot(0, self.requestNewFortune) return self.currentFortune = nextFortune self.statusLabel.setText(self.currentFortune) self.getFortuneButton.setEnabled(True)
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 readData(self): instr = QDataStream(self.tcpSocket) raw_data = instr.readQString() if raw_data != "": self.writeData() self.update() data = raw_data.split("p") if len(data) > 1: del data[0] self.game_data = data diff = len(data) - self.player_count if diff > 0: for i in range(0, diff): self.spawnPlayer() self.player_count += 1
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
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)
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()