在使用QTextBrowser用於記錄輸出日志,並接管了標准輸出后,對於某些Python模塊輸出的反映處理進度的提示內容,在pycharm中顯示為一行,但在自己的日志文件中顯示為N多行。為此分析了一下這些特殊的日志信息,發現是使用’\r’為開頭的字符串,即輸出不換行但回到行首。為此要做QTextEdit和QTextBrowser實現類似的效果,可以通過對行首的’\r’字符采用刪除當前行的方式進行處理。
參考代碼如下:
if info.startswith('\r'):
lastLine = self.hisInfo.textCursor()
lastLine.select(QtGui.QTextCursor.LineUnderCursor)
lastLine.removeSelectedText()
self.hisInfo.moveCursor(QtGui.QTextCursor.StartOfLine, QtGui.QTextCursor.MoveAnchor)
infoTmp = info.strip("\r")
if self.loadWin.isLogTime:
self.hisInfo.insertPlainText(time.strftime("%Y%m%d%H%M%S", time.localtime())+": "+infoTmp)
else:self.hisInfo.insertPlainText(infoTmp)
上述代碼中,self.hisInfo為記錄輸出日志的QTextEdit或QTextBrowser對象,info為截獲的輸出信息(關於怎么截獲標准輸出可以參考《PyQt(Python+Qt)學習隨筆:print標准輸出sys.stdout以及stderr重定向QTextBrowser等圖形界面對象》)。