AOC55

Backend, Devops, Cloud, kubernetes

BackEnd/Python

파이썬:: PyQt5 - QtPlainTextEdit 객체에 텍스트 append 할때 바로 반영이 안되는 경우

aoc55.soft@gmail.com 2019. 3. 17. 00:20

최근 PyQt5를 이용해서 UI를 만들고, 로직을 짜던 중...


 1) QtPushButton 클릭


 2) 버튼명.clicked.connect에 연결된 함수 실행


 3) 함수 내부에서 QtPlainTextEdit / QtTextEdit 에 텍스트 append 하기 (appendPlainText)


 4) QtPlainTextEdit 에 append된 텍스트 확인


이 단순한 로직에서,  


3번->4번에서 QtPlainTextEdit UI에 텍스트가 추가되는데 Delay가 발생한다거나,  


텍스트가 한번에 출력이 안되고 해당 부분을 드래그해야 출력되는 문제가 있었다.


삽질을 거듭한 결과(PyQt5는 검색해도 별로 나오는게 없다..) 



해결책은 


1
QCoreApplication.processEvents()
cs


위 코드를 append 앞에 추가하는 것이다.



추가한 예시) 아래의 '객체명'에는 본인이 만든 QtPlainTextEdit 객체 명을 넣으면 된다.

1
2
3
def append_plain_log(self, msg):
    QCoreApplication.processEvents()
    self.객체명.appendPlainText(msg)
cs



P.S 원인은 잘 모르고 대략적으로 추측해보자면, 프로그램 수행하는 메인스레드와, UI를 관리하는(즉 새로 추가된 텍스트를 UI객체에 append해주는)스레드간의 싱크(?)가 안 맞거나 혹은 스레드 간의 통신에서 바로 전달 안되고 딜레이가 걸리거나 해서 그런 것 같다.