python ,pyqt4,如何将print出来的内容输出到界面上的文本框中?

Python021

python ,pyqt4,如何将print出来的内容输出到界面上的文本框中?,第1张

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

答:我知道目前你应该就是用qt designer设计好了界面,然后你的Python代码是PyCharm,那么要将两者连接起来的话,有两种方法。

使用pyuic功能,这个功能需要你在PyCharm上面配置一下pyqt,可以将Qt的UI文件转化为一个Python的类,然后你就可以直接在你的工程里面引用这个类; 无需将UI文件转化为Python中的类,而只需要直接加载该UI文件就可以了,使用如下代码,如图红框所示,其中涉及到PyQt.uic的loadUi类。

直接加载UI文件

希望对你有帮助~