def main(args): def split_and_strip(s, splitter): return [s.strip() for s in line.split(splitter)] app = QApplication(args) model = QStandardItemModel() file = QFile(QFileInfo(__file__).absolutePath() + '/grades.txt') if file.open(QFile.ReadOnly): line = file.readLine(200).decode('utf-8') header = split_and_strip(line, ',') model.setHorizontalHeaderLabels(header) row = 0 while file.canReadLine(): line = file.readLine(200).decode('utf-8') if not line.startswith('#') and ',' in line: fields = split_and_strip(line, ',') for col, field in enumerate(fields): newItem = QStandardItem(field) model.setItem(row, col, newItem) row += 1 file.close() tableView = FreezeTableWidget(model) tableView.setWindowTitle("Frozen Column Example") tableView.resize(560, 680) tableView.show() return app.exec_()
def setupUi(self): uic.loadUi("src/ui/dbconfig.ui", self) stylesheet = QFile("assets/qss/dialog.qss") stylesheet.open(QIODevice.ReadWrite | QIODevice.Text) self.setStyleSheet(QTextStream(stylesheet).readAll()) self.port.setMinimum(1) self.port.setMaximum(65536) f = QFile("config/database.config") if f.open(QIODevice.ReadWrite | QIODevice.Text): name = f.readLine(255) username = f.readLine(255) password = f.readLine(255) hostname = f.readLine(255) port = f.readLine(1000) f.close() self.nameInConfig = str(name)[17:-3] self.usernameInConfig = str(username)[21:-3] self.passwordInConfig = str(password)[21:-3] self.hostnameInConfig = str(hostname)[21:-3] self.portInConfig = int(str(port)[17:-1]) self.dbName.setText(self.nameInConfig) self.username.setText(self.usernameInConfig) self.password.setText(self.passwordInConfig) self.hostname.setText(self.hostnameInConfig) self.port.setValue(self.portInConfig) self.accept.clicked.connect(self.configure) self.cancel.clicked.connect(self.close)
def get_cdrom_drives(): """List available disc drives on the machine """ # add default drive from libdiscid to the list drives = list(DEFAULT_DRIVES) if sys.platform == 'win32': GetLogicalDrives = windll.kernel32.GetLogicalDrives GetDriveType = windll.kernel32.GetDriveTypeW DRIVE_CDROM = 5 mask = GetLogicalDrives() for i in range(26): if mask >> i & 1: drive = chr(i + ord("A")) + ":" if GetDriveType(drive) == DRIVE_CDROM: drives.append(drive) elif sys.platform == 'linux2' and QFile.exists(LINUX_CDROM_INFO): # Read info from /proc/sys/dev/cdrom/info cdinfo = QFile(LINUX_CDROM_INFO) if cdinfo.open(QIODevice.ReadOnly | QIODevice.Text): drive_names = [] drive_audio_caps = [] line = string_(cdinfo.readLine()) while line: if ":" in line: key, values = line.split(':') if key == 'drive name': drive_names = values.split() elif key == 'Can play audio': drive_audio_caps = [v == '1' for v in values.split()] break # no need to continue past this line line = string_(cdinfo.readLine()) # Show only drives that are capable of playing audio for index, drive in enumerate(drive_names): if drive_audio_caps[index]: device = '/dev/%s' % drive symlink_target = QFile.symLinkTarget(device) if symlink_target != '': device = symlink_target drives.append(device) else: for device in config.setting["cd_lookup_device"].split(","): # Need to filter out empty strings, # particularly if the device list is empty if device.strip() != '': drives.append(device.strip()) # make sure no drive is listed twice (given by multiple sources) return sorted(uniqify(drives))
def __openByIODevice(self, fileName): ##用QFile打开文件 fileDevice = QFile(fileName) if not fileDevice.exists(): #判断文件是否存在 return False if not fileDevice.open(QIODevice.ReadOnly | QIODevice.Text): return False ###整个文件一次性读取的方式,可行 ## qtBytes=fileDevice.readAll() #返回QByteArray类型 ## pyBytes=bytes(qtBytes.data()) # 将QByteArray转换为bytes类型 ## text=pyBytes.decode("utf-8") #用utf-8编码为字符串 ## self.ui.textEdit.setPlainText(text) ## 逐行读取方式,可行 try: self.ui.textEdit.clear() while not fileDevice.atEnd(): qtBytes = fileDevice.readLine() # 返回QByteArray类型 pyBytes = bytes(qtBytes.data()) # QByteArray转换为bytes类型 lineStr = pyBytes.decode("utf-8") #bytes转换为str型 lineStr = lineStr.strip() #去除结尾增加的空行 self.ui.textEdit.appendPlainText(lineStr) finally: fileDevice.close() return True
def __init__(self, parent=None): super(CuriWidget, self).__init__(parent, Qt.FramelessWindowHint | Qt.WindowSystemMenuHint) self.addCustomAction() w = qApp.desktop().screenGeometry().width() h = qApp.desktop().screenGeometry().height() side = round((8 / 9) * min(w / cols, h / rows)) self.setFixedSize(side * QSize(cols, rows)) self.thread = SoundThread(self) self.dragPosition = QPoint() self.button = None self.setWindowIcon(QIcon(":curielements")) region = QRegion(QRect(0, 0, 2 * side, 2 * side), QRegion.Ellipse) region += QRegion(QRect(side, 0, 8 * side, 15 * side)) region += QRegion(QRect(0, side, side, 13 * side)) region += QRegion(QRect(0, 13 * side, 2 * side, 2 * side), QRegion.Ellipse) region += QRegion(QRect(9 * side, side, side, 14 * side)) region += QRegion(QRect(8 * side, 0, 2 * side, 2 * side), QRegion.Ellipse) region += QRegion(QRect(10 * side, 2 * side, 19 * side, 13 * side)) region += QRegion(QRect(28 * side, 2 * side, 2 * side, 2 * side), QRegion.Ellipse) region += QRegion(QRect(29 * side, 3 * side, side, 11 * side)) region += QRegion(QRect(28 * side, 13 * side, 2 * side, 2 * side), QRegion.Ellipse) self.setMask(region) self.atoms = Atoms(self) self.atoms.setGeometry( QRect(1.5 * side, 1.5 * side, 7 * side, 7 * side)) offset = QPoint(10 * side, 3 * side) file = QFile(":elements") file.open(QFile.ReadOnly | QFile.Text) colors = [blue, yellow] self.btns = [] while not file.atEnd(): x, y, name, symbol, electron, description, description2, _ = file.readLine( ).split(',') coordinate = QPoint(int(x), int(y)) text = bytearray(name).decode() btn = ElementButton(QSize(side, side), colors, int(electron), bytearray(symbol).decode(), text, self) btn.move(offset + coordinate * side) btn.clicked.connect(self.button_clicked) self.btns.append(btn) self.imageDescription = DescriptionButton(side * QSize(7, 4.5), blue, self) self.imageDescription.move(1.5 * side, 9 * side) btnSound = DescriptionButton(side * QSize(2, 2), blue, self) btnSound.move(11 * side, 12 * side) btnSound.updateBackground(":soundOn") btnSound.clicked.connect(self.sound_clicled)
def __parseData(self, dataFile, loadPrivateDomains=False): """ Private method to parse TLD data. @param dataFile name of the file containing the TLD data @type str @param loadPrivateDomains flag indicating to load private domains @type bool @return flag indicating success @rtype bool """ # start with a fresh dictionary self.__tldDict = collections.defaultdict(list) file = QFile(dataFile) if not file.open(QFile.ReadOnly | QFile.Text): return False seekToEndOfPrivateDomains = False while not file.atEnd(): line = bytes(file.readLine()).decode("utf-8").strip() if not line: continue if line.startswith("."): line = line[1:] if line.startswith("//"): if "===END PRIVATE DOMAINS===" in line: seekToEndOfPrivateDomains = False if (not loadPrivateDomains and "===BEGIN PRIVATE DOMAINS===" in line): seekToEndOfPrivateDomains = True continue if seekToEndOfPrivateDomains: continue # only data up to the first whitespace is used line = line.split(None, 1)[0] if "." not in line: self.__tldDict[line].append(line) else: key = line[line.rfind(".") + 1:] self.__tldDict[key].append(line) return self.isDataLoaded()
class StreamHandler(QObject): commandReceived = pyqtSignal(str) def __init__(self, parent = None): QObject.__init__(self, parent) def openInput(self): self.stdin = QFile() self.stdin.open(0, QFile.ReadOnly) def openOutput(self): self.stdout = QFile() self.stdout.open(1, QFile.WriteOnly) def handleInput(self): while self.stdin.isOpen(): command = str(self.stdin.readLine(), "utf8") if not command: break self.commandReceived.emit(command.strip()) # This shouldn't be needed, but QFile can get into a state where # readLine no longer blocks. print("Input stream closed.") @pyqtSlot(QByteArray) def handleOutput(self, data): while self.stdout.isOpen() and data.size() > 0: written = self.stdout.write(data) data = data.right(data.size() - written) @pyqtSlot(str) def handleOutput(self, data): data = QByteArray(bytes(data, "utf8")) while self.stdout.isOpen() and data.size() > 0: written = self.stdout.write(data) self.stdout.flush() data = data.right(data.size() - written)
def checkFirstLogin(self): f = QFile("config/global.config") if f.open(QIODevice.ReadWrite | QIODevice.Text): isFirstLogin = str(f.readLine())[18:-3] == "True" f.close() if isFirstLogin: f.remove("config/global.config") if f.open(QIODevice.ReadWrite | QIODevice.Text): stream = QTextStream(f) stream << "is_first_login: False" f.close() dbconfig = DBConfig() dbconfig.exec_() createTables = tablesRun()
def __openByIODevice(self, fileName): fileDevice = QFile(fileName) if not fileDevice.exists(): return False if not fileDevice.open(QIODevice.ReadOnly | QIODevice.Text): return False try: self.ui.textEdit.clear() while not fileDevice.atEnd(): qtBytes = fileDevice.readLine() pyBytes = bytes(qtBytes.data()) lineStr = pyBytes.decode("utf-8") lineStr = lineStr.strip() self.ui.textEdit.appendPlainText(lineStr) finally: fileDevice.close() return True
def runFile(self): myCmd0= 'python /Users/tania/Desktop/Desktop/ORIGINAL/Code/Tugas_Akhir/AksaraBatak/Translator/converter.py' myCmd = 'python test_model.py ./models/CNN.pth ./models/voc-model-labels.txt ./outs/ImageSets/test.txt' myCmd2 = 'python /Users/tania/Desktop/Desktop/ORIGINAL/Code/Tugas_Akhir/AksaraBatak/BFS/bfs.py' os.system(myCmd0) os.system(myCmd) os.system(myCmd2) file = QFile("/Users/tania/Desktop/Desktop/ORIGINAL/Code/Tugas_Akhir/AksaraBatak/BFS/outputBFS.txt") if file.open(QIODevice.ReadOnly | QIODevice.Text): stream = QTextStream(file) while not stream.atEnd(): line = file.readLine() line.append(stream.readLine()+"\n") encodedString = line.append(stream.readLine()+"\n") codec = QTextCodec.codecForName("KOI8-R") string = codec.toUnicode(encodedString) self.results.setText(string) file.close();
def modelFromFile(self, fileName): f = QFile(fileName) if not f.open(QFile.ReadOnly): return QStringListModel(self.completer) QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) words = [] while not f.atEnd(): line = f.readLine().trimmed() if line.length() != 0: try: line = str(line, encoding='ascii') except TypeError: line = str(line) words.append(line) QApplication.restoreOverrideCursor() return QStringListModel(words, self.completer)
def loadFromFile(self, fileName): f = QFile(fileName) if not f.open(QFile.ReadOnly): model = QStringListModel() self._completer.setModel(model) QApplication.setOverrideCursor(QCursor(Qt.WaitCursor)) words = [] while not f.atEnd(): line = f.readLine().trimmed() if line.length() != 0: try: line = str(line, encoding='utf-8') except TypeError: line = str(line) words.append(line) QApplication.restoreOverrideCursor() model = QStringListModel(words) self._completer.setModel(model)
def test(self): """ Public method to execute the tests. @return flag indicating the test result @rtype bool """ self.__withPrivate = True self.__loadData() if not self.__tldDict: return False testDataFileName = "" testDataFileExist = False for path in self.__dataSearchPaths: testDataFileName = (QFileInfo(path + "/test_psl.txt").absoluteFilePath()) if QFileInfo(testDataFileName).exists(): testDataFileExist = True break if not testDataFileExist: testFileDownloadLink = ( "http://mxr.mozilla.org/mozilla-central/source/netwerk/test/" "unit/data/test_psl.txt?raw=1") E5MessageBox.information( None, self.tr("TLD Data File not found"), self.tr("""<p>The file 'test_psl.txt' was not found!""" """<br/>You can download it from '<a href="{0}">""" """<b>here</b></a>' to one of the following""" """ paths:</p><ul>{1}</ul>""").format( testFileDownloadLink, "".join([ "<li>{0}</li>".format(p) for p in self.__dataSearchPaths ]))) return False file = QFile(testDataFileName) if not file.open(QFile.ReadOnly | QFile.Text): return False testRegExp = QRegExp( "checkPublicSuffix\\(('([^']+)'|null), ('([^']+)'|null)\\);") allTestSuccess = True while not file.atEnd(): line = bytes(file.readLine()).decode("utf-8").strip() if not line or line.startswith("//"): continue if testRegExp.indexIn(line) == -1: allTestSuccess = False else: hostName = testRegExp.cap(2) registrableName = testRegExp.cap(4) if not self.__checkPublicSuffix(hostName, registrableName): allTestSuccess = False if allTestSuccess: qWarning("E5TldExtractor: Test passed successfully.") else: qWarning("E5TldExtractor: Test finished with some errors!") # reset the TLD dictionary self.__tldDict = collections.defaultdict(list) return allTestSuccess
def ConverttxtToPack(in1, out1, default_ver='3.13', default_type='standard'): dsoIn = QFile(in1) if dsoIn.open(QIODevice.ReadOnly | QIODevice.Text) is False: return dsoOut = QFile(out1) if dsoOut.open(QIODevice.WriteOnly) is False: return totalRecords = 0 while (dsoIn.atEnd() is False): dsoIn.readLine() totalRecords += 1 dsoIn.seek(0) dsoOutStream = QDataStream(dsoOut) dsoOutStream.setVersion(QDataStream.Qt_5_2) readOk = 0 addedHead = False while (dsoIn.atEnd() is False): record = str(dsoIn.readLine(), encoding='utf-8') vp = re.match("^.*ersion\s+([\d\.]+)\s+(\w+)", record) if vp: print(vp.group(1), vp.group(2)) dsoOutStream.writeQString(vp.group(1)) dsoOutStream.writeQString(vp.group(2)) addedHead = True if (record.startswith("//") or record.startswith("#")): totalRecords -= 1 continue # write when could not get label from txt if not addedHead: dsoOutStream.writeQString(default_ver) dsoOutStream.writeQString(default_type) addedHead = True lis = record.split('\t') if 1: id = int(lis[0] if lis[0] != "" else 0) ra = float((lis[1]).strip()) dec = float((lis[2]).strip()) bMag = float(lis[3]) vMag = float(lis[4]) oType = (lis[5]).strip() # mType = (lis[6]).strip() # majorAxisSize = float(lis[7]) minorAxisSize = float(lis[8]) orientationAngle = int(float(lis[9]) if float(lis[9]) != "" else 0) z = float(lis[10]) zErr = float(lis[11]) plx = float(lis[12]) plxErr = float(lis[13]) dist = float(lis[14]) distErr = float(lis[15]) NGC = int(lis[16] if lis[16] != "" else 0) IC = int(lis[17] if lis[17] != "" else 0) M = int(lis[18] if lis[18] != "" else 0) C = int(lis[19] if lis[19] != "" else 0) B = int(lis[20] if lis[20] != "" else 0) Sh2 = int(lis[21] if lis[21] != "" else 0) VdB = int(lis[22] if lis[22] != "" else 0) RCW = int(lis[23] if lis[23] != "" else 0) LDN = int(lis[24] if lis[24] != "" else 0) LBN = int(lis[25] if lis[25] != "" else 0) Cr = int(lis[26] if lis[26] != "" else 0) Mel = int(lis[27] if lis[27] != "" else 0) PGC = int(lis[28] if lis[28] != "" else 0) UGC = int(lis[29] if lis[29] != "" else 0) Ced = (lis[30]).strip() # Arp = int(lis[31] if lis[31] != "" else 0) VV = int(lis[32] if lis[32] != "" else 0) PK = (lis[33]).strip() # PNG = (lis[34]).strip() # SNRG = (lis[35]).strip() # ACO = (lis[36]).strip() # HCG = (lis[37]).strip() # ESO = (lis[38]).strip() # VdBH = (lis[39]).strip() # DWB = int(lis[40] if lis[40] != "" else 0) Tr = int(lis[41] if lis[41] != "" else 0) St = int(lis[42] if lis[42] != "" else 0) Ru = int(lis[43] if lis[43] != "" else 0) VdBHa = int(lis[44] if lis[44] != "" else 0) raRad = float(ra) * math.pi / 180 decRad = float(dec) * math.pi / 180 majorAxisSize /= 60 minorAxisSize /= 60 if (bMag <= 0): bMag = 99 if (vMag <= 0): vMag = 99 if oType.upper() in otypedic: nType = otypedic[oType.upper()] else: nType = 36 readOk += 1 dsoOutStream.writeInt(id) dsoOutStream.writeFloat(raRad) dsoOutStream.writeFloat(decRad) dsoOutStream.writeFloat(bMag) dsoOutStream.writeFloat(vMag) dsoOutStream.writeInt(nType) dsoOutStream.writeQString(mType) dsoOutStream.writeFloat(majorAxisSize) dsoOutStream.writeFloat(minorAxisSize) dsoOutStream.writeInt(orientationAngle) dsoOutStream.writeFloat(z) dsoOutStream.writeFloat(zErr) dsoOutStream.writeFloat(plx) dsoOutStream.writeFloat(plxErr) dsoOutStream.writeFloat(dist) dsoOutStream.writeFloat(distErr) dsoOutStream.writeInt(NGC) dsoOutStream.writeInt(IC) dsoOutStream.writeInt(M) dsoOutStream.writeInt(C) dsoOutStream.writeInt(B) dsoOutStream.writeInt(Sh2) dsoOutStream.writeInt(VdB) dsoOutStream.writeInt(RCW) dsoOutStream.writeInt(LDN) dsoOutStream.writeInt(LBN) dsoOutStream.writeInt(Cr) dsoOutStream.writeInt(Mel) dsoOutStream.writeInt(PGC) dsoOutStream.writeInt(UGC) dsoOutStream.writeQString(Ced) dsoOutStream.writeInt(Arp) dsoOutStream.writeInt(VV) dsoOutStream.writeQString(PK) dsoOutStream.writeQString(PNG) dsoOutStream.writeQString(SNRG) dsoOutStream.writeQString(ACO) dsoOutStream.writeQString(HCG) dsoOutStream.writeQString(ESO) dsoOutStream.writeQString(VdBH) dsoOutStream.writeInt(DWB) dsoOutStream.writeInt(Tr) dsoOutStream.writeInt(St) dsoOutStream.writeInt(Ru) dsoOutStream.writeInt(VdBHa) dsoIn.close() dsoOut.flush() dsoOut.close() return
def ConverttxtToPack(in1,out1): dsoIn = QFile(in1) if dsoIn.open(QIODevice.ReadOnly | QIODevice.Text) is False: return dsoOut=QFile(out1) if dsoOut.open(QIODevice.WriteOnly) is False: return totalRecords = 0 while (dsoIn.atEnd() is False): dsoIn.readLine() totalRecords+=1 dsoIn.seek(0) dsoOutStream = QDataStream(dsoOut) dsoOutStream.setVersion(QDataStream.Qt_5_2) readOk = 0 dsoOutStream.writeQString('3.11') dsoOutStream.writeQString('standard') while (dsoIn.atEnd() is False): record = str(dsoIn.readLine(), encoding='utf-8') vp = re.match("ersion\s+([\d\.]+)\s+(\w+)",record) if (record.startswith("//") or record.startswith("#")): totalRecords-=1 continue lis=record.split('\t') try: # if 1: id = int(lis[0]) ra = float((lis[1]).strip()) dec = float((lis[2]).strip()) bMag = float(lis[3]) vMag = float(lis[4]) oType = (lis[5]).strip() mType = (lis[6]).strip() majorAxisSize = float(lis[7]) minorAxisSize = float(lis[8]) orientationAngle = int(float(lis[9])) z = float(lis[10]) zErr = float(lis[11]) plx = float(lis[12]) plxErr = float(lis[13]) dist = float(lis[14]) distErr = float(lis[15]) NGC = int(lis[16]) IC = int(lis[17]) M = int(lis[18]) C = int(lis[19]) B = int(lis[20]) Sh2 = int(lis[21]) VdB = int(lis[22]) RCW = int(lis[23]) LDN = int(lis[24]) LBN = int(lis[25]) Cr = int(lis[26]) Mel = int(lis[27]) PGC = int(lis[28]) UGC = int(lis[29]) Ced = (lis[30]).strip() Arp = int(lis[31]) VV = int(lis[32]) PK = (lis[33]).strip() PNG = (lis[34]).strip() SNRG = (lis[35]).strip() ACO = (lis[36]).strip() HCG = (lis[37]).strip() ESO = (lis[38]).strip() VdBH = (lis[39]).strip() DWB = int(lis[40]) Tr = int(lis[41]) St = int(lis[42]) Ru = int(lis[43]) VdBHa = int(lis[44]) raRad = float(ra) * math.pi / 180 decRad = float(dec) * math.pi / 180 majorAxisSize /= 60 minorAxisSize /= 60 if (bMag <= 0): bMag = 99 if (vMag <= 0): vMag = 99 if oType.upper() in otypedic: nType = otypedic[oType.upper()] else: nType = 36 readOk += 1 dsoOutStream.writeInt(id) dsoOutStream.writeFloat(ra/180*math.pi) dsoOutStream.writeFloat(dec/180*math.pi) dsoOutStream.writeFloat(bMag) dsoOutStream.writeFloat(vMag) dsoOutStream.writeInt(nType) # dsoOutStream.writeUInt64(nType) dsoOutStream.writeQString(mType) dsoOutStream.writeFloat(majorAxisSize) dsoOutStream.writeFloat(minorAxisSize) dsoOutStream.writeInt(orientationAngle) dsoOutStream.writeFloat(z) dsoOutStream.writeFloat(zErr) dsoOutStream.writeFloat(plx) dsoOutStream.writeFloat(plxErr) dsoOutStream.writeFloat(dist) dsoOutStream.writeFloat(distErr) dsoOutStream.writeInt(NGC) dsoOutStream.writeInt(IC) dsoOutStream.writeInt(M) dsoOutStream.writeInt(C) dsoOutStream.writeInt(B) dsoOutStream.writeInt(Sh2) dsoOutStream.writeInt(VdB) dsoOutStream.writeInt(RCW) dsoOutStream.writeInt(LDN) dsoOutStream.writeInt(LBN) dsoOutStream.writeInt(Cr) dsoOutStream.writeInt(Mel) dsoOutStream.writeInt(PGC) dsoOutStream.writeInt(UGC) dsoOutStream.writeQString(Ced) dsoOutStream.writeInt(Arp) dsoOutStream.writeInt(VV) dsoOutStream.writeQString(PK) dsoOutStream.writeQString(PNG) dsoOutStream.writeQString(SNRG) dsoOutStream.writeQString(ACO) dsoOutStream.writeQString(HCG) dsoOutStream.writeQString(ESO) dsoOutStream.writeQString(VdBH) dsoOutStream.writeInt(DWB) dsoOutStream.writeInt(Tr) dsoOutStream.writeInt(St) dsoOutStream.writeInt(Ru) dsoOutStream.writeInt(VdBHa) except: print(record) continue dsoIn.close() dsoOut.flush() dsoOut.close() return
file = QFile('/Users/junahyung/emomovie/SimpsonSen.mp4') print(1) isOpen = file.open(QIODevice.ReadOnly) print(2) buffer = QBuffer() buffer.open(QIODevice.ReadWrite) print(3) player.setMedia(QMediaContent(), buffer) print(4) if isOpen: while not file.atEnd(): temp = file.readLine() # temp = QByteArray.fromBase64(temp) buffer.write(temp) print(5) videoWidget = QVideoWidget() print(6) player.setVideoOutput(videoWidget) print(7) videoWidget.show() print(8) player.play() while(player.MediaStatus()==QMediaPlayer.UnknownMediaStatus): print("a") print(9)
class LogFilePositionSource(QGeoPositionInfoSource): def __init__(self, parent=None): super().__init__(parent) self.lastPosition = QGeoPositionInfo() self.logFile = QFile(self) self.timer = QTimer(self) self.timer.timeout.connect(self.readNextPosition) self.logFile.setFileName(":/simplelog.txt") if not self.logFile.open(QIODevice.ReadOnly): print("Error: cannot open source file", self.logFile.fileName()) def lastKnownPosition(self, fromSatellitePositioningMethodsOnly=False): return self.lastPosition def supportedPositioningMethods(self): return QGeoPositionInfoSource.AllPositioningMethods def minimumUpdateInterval(self): return 500 def error(self): return QGeoPositionInfoSource.NoError def startUpdates(self): interval = self.updateInterval() if interval < self.minimumUpdateInterval(): interval = self.minimumUpdateInterval() self.timer.start(interval) def stopUpdates(self): self.timer.stop() def requestUpdate(self, timeout=5000): # For simplicity, ignore timeout - assume that if data is not available # now, no data will be added to the file later if self.logFile.canReadLine(): self.readNextPosition() else: self.updateTimeout.emit() def readNextPosition(self): line = self.logFile.readLine().trimmed() if not line.isEmpty(): data = line.split(" ") latitude = 0 longitude = 0 hasLatitude = False hasLongitude = False timestamp = QDateTime.fromString(data[0].data().decode(), Qt.ISODate) latitude, hasLatitude = data[1].toDouble() longitude, hasLongitude = data[2].toDouble() if hasLatitude and hasLongitude and timestamp.isValid(): coordinate = QGeoCoordinate(latitude, longitude) info = QGeoPositionInfo(coordinate, timestamp) if info.isValid(): self.lastPosition = info self.positionUpdated.emit(info)