최근 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해주는)스레드간의 싱크(?)가 안 맞거나 혹은 스레드 간의 통신에서 바로 전달 안되고 딜레이가 걸리거나 해서 그런 것 같다.
'BackEnd > Python' 카테고리의 다른 글
파이썬 :: 자료형들(튜플, 리스트, 딕셔너리) (0) | 2019.07.04 |
---|---|
파이썬 :: logging 모듈을 활용한 로그 찍기 (0) | 2019.02.10 |
파이썬 :: 맥(MAC) 환경에서, Redis 설치 및 파이썬 연동 (0) | 2019.02.05 |
파이썬 :: 아나콘다(ANACONDA) 맥 환경에서 가상환경 세팅하기 (1) | 2019.01.29 |