from PyQt4 import QtGui,QtCore
import threading,time
class sy(QtGui.QWidget):
txt_signal = QtCore.pyqtSignal(str)
def __init__(self,parent=None):
self.app=QtGui.QApplication([])
super(sy,self).__init__(parent)
self.txt=QtGui.QTextEdit()
lay=QtGui.QVBoxLayout()
self.txt_signal.connect(self.writetoTextbox)
lay.addWidget(self.txt)
self.setLayout(lay)
def main(self):
self.show()
self.app.exec_()
def write(self,s):
self.txt_signal.emit(s)
@QtCore.pyqtSlot(str)
def writetoTextbox(self,text):
self.txt.append(text)
def PrintSomething(stream):
time.sleep(3)
print('hello world',file=stream,end="Yes,it's a test!")
if __name__=='__main__':
s=sy()
t=threading.Thread(target=PrintSomething,args=(s,))
t.start()
s.main()
要点:
一、print(value, ..., sep=' ', end='\n', file=sys.stdout):
file参数决定输出内容要输出到哪里,任何拥有write(self,s)方法的对象都可以充作此参数
value参数的字符串表示将被作为一次输出,定向到file对象
end参数将被作为第二次输出,定向到file对象
二、PyQt绘制出的GUI界面用常规方法是无法从后台线程访问界面上的控件的,所以这里就另外定义了一个pyqtSignal,在后台线程调用write方法时在write方法中引发此信号的事件。
如果是你指定的内容打印到文本框如:print 'hello!',可以用os.system('echo > /root/a.txt')
如果是执行过程中的打印到文本框如:解压一个文件的过程 用os.system('tar -xzvf a.tgz >/root/a.txt')
self.outputbox.setText( )
outputbox 为你的文件筐名称
函数参数为你想输出的东西,也就是你获取到的值
捕获文本框对象
这类文本控件不是都有insert方法吗,直接用就好了