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方法中引發此信號的事件。