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文件
希望对你有帮助~