這是如何工作的無緒:)
1)創建PyQt的文本編輯日誌查看:
self.logView = QtGui.QTextEdit()
2)PyQt的文本編輯添加到佈局:
layout = QtGui.QGridLayout()
layout.addWidget(self.logView,-ROW NUMBER-,-COLUMN NUMBER-)
self.setLayout(layout)
3)魔術功能是:
def refresh_text_box(self,MYSTRING):
self.logView.append('started appending %s' % MYSTRING) #append string
QtGui.QApplication.processEvents() #update gui for pyqt
調用上述功能在循環或直接傳遞級聯得到的線以上的功能是這樣的:
self.setLayout(layout)
self.setGeometry(400, 100, 100, 400)
QtGui.QApplication.processEvents()#update gui so that pyqt app loop completes and displays frame to user
while(True):
refresh_text_box(MYSTRING)#MY_FUNCTION_CALL
MY_LOGIC
#then your gui loop
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
dialog = MAIN_FUNCTION()
sys.exit(dialog.exec_())
爲什麼不使用信號和插槽來動態更新GUI? – Trilarion
[從線程引入PyQt的一行文本]中可能出現的重複(http://stackoverflow.com/questions/24266251/introduce-a-text-in-a-- lineedit-of-pyqt-from-a-線程) –
另請參閱http://stackoverflow.com/questions/21071448/redirecting-stdout-and-stderr-to-a-pyqt4-qtextedit-from-a-secondary-thread(不是這個的重複,但是高度相關) –