2014-02-25 1 views
1

사용자 지정 출력 스트림을 만들었습니다. 도움말을 통해 출력을 파이썬 QT 텍스트 편집기로 리디렉션하고 있지만 텍스트 편집은 리디렉션 된 모든 출력을 보여줍니다. 한 번에 마지막 줄만 표시하는 방법이 있는지 알고 싶습니다. 예를 들어 1에서 99까지 시작하는 for 루프의 데이터를 보여줍니다. 텍스트 편집은 1에서 99까지의 모든 반복 데이터를 표시합니다. 나는 그것이 마지막 줄만 보여 주길 원합니다. 즉 2 세가 될 수도 있고 3 세일 수도 있고 99 세까지있을 수도 있습니다.Python 리디렉션 및 pyQt 위젯의 마지막 줄만 표시

참조하십시오 아래의 예제 코드 : 사전에

import sys 
import os 
from PyQt4 import QtGui,QtCore 
from threading import Thread 


class EmittingStream(QtCore.QObject): 

    textWritten = QtCore.pyqtSignal(str) 

    def write(self, text): 
     self.textWritten.emit(str(text)) 

class gui(QtGui.QMainWindow): 

    def __init__(self): 
    # ... 
     super(gui, self).__init__() 
    # Install the custom output stream 
     sys.stdout = EmittingStream(textWritten=self.normalOutputWritten) 
     self.initUI() 

    def __del__(self): 
     # Restore sys.stdout 
     sys.stdout = sys.__stdout__ 


    def normalOutputWritten(self, text): 
     cursor = self.textEdit.textCursor() 
     cursor.movePosition(QtGui.QTextCursor.End) 
     cursor.insertText(text) 
     self.textEdit.ensureCursorVisible() 

    def callProgram(self): 
     for i in range(1,100): 
      command="echo hi %s"%i 
      result=os.popen(str(command)).read() 
      print result 


    def initUI(self): 
     self.setGeometry(100,100,300,300) 
     self.show() 

     cmd=QtGui.QButtonGroup(self) 
     self.NoCmd=QtGui.QRadioButton("Best Quality",self) 
     self.NoCmd.setChecked(True) 
     self.runCommand = QtGui.QRadioButton("Quality Options",self) 
     cmd.addButton(self.NoCmd) 
     cmd.addButton(self.runCommand) 
     self.lineEdit=QtGui.QLineEdit(self) 

     self.textEdit=QtGui.QTextEdit(self) 
     self.textEdit.show() 
     self.textEdit.setGeometry(20,40,200,200) 
     self.lineEdit.move(200,0) 
     self.runCommand.move(100,0) 

     self.lineEdit.show() 
     self.NoCmd.show() 
     self.runCommand.show() 
     print "changing sys.out" 
     print "hello" 

     thread = Thread(target = self.callProgram) 
     thread.start() 


#Function Main Start 
def main(): 
    app = QtGui.QApplication(sys.argv) 
    ui=gui() 
    sys.exit(app.exec_()) 
#Function Main END 

if __name__ == '__main__': 
    main() 

감사

답변

2

당신은 텍스트 편집의 첫 번째 줄 수 라인이 일정 한도를 초과 할 때마다 제거 할 수 있습니다 :

def normalOutputWritten(self, text): 
     cursor = self.textEdit.textCursor() 
     cursor.movePosition(QtGui.QTextCursor.End) 
     cursor.insertText(text) 
     # show only the last 10 lines 
     if self.textEdit.document().lineCount() > 10: 
      cursor.movePosition(QtGui.QTextCursor.Start) 
      cursor.select(QtGui.QTextCursor.LineUnderCursor) 
      cursor.removeSelectedText() 
      cursor.deleteChar() 
     self.textEdit.ensureCursorVisible() 
+0

이것은 다소 도움이되었습니다. 도움을 주셔서 감사합니다. –

관련 문제