QtDesiger로 그린 화면에 프로그램의 로그를 출력해보자.
핵심은 logging.handler를 상속받은 사용자 정의 핸들러를 이용하는 것이다.
우선 핸들러를 하나 만들자.
class LogStringHandler(logging.Handler):
def __init__(self, target_widget):
# 포맷터 및 레벨, 출력할 대상 위젯 설정
super(LogStringHandler, self).__init__()
self.target_widget = target_widget
def emit(self, record):
# 대상 위젯에 로그 내용을 추가한다.
self.target_widget.append(record.asctime + ' -- ' + record.getMessage())
생성자에 대상 위젯을 넣어서 멤버로 할당하고, 로그 변화 발생 시 해당 위젯에 기록하게끔 설정한다.
QtWidget들 중에 QtTextBrowser를 사용하기로 정했다.
append()를 사용하면 내용 뒤에 새로운 내용을 붙여 넣을 수 있다.
record의 맴버중 asctime은 logging.basicConfig()를 통해 포메터에 대상을 출력하도록 정했을 때 사용할 수 있다.
ex)logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
전체 코드는 아래와 같다.
import sys
import logging
from PyQt5.QtWidgets import *
from PyQt5 import uic
test_ui_class = uic.loadUiType("../ui/test_window.ui")[0]
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
class LogStringHandler(logging.Handler):
def __init__(self, target_widget):
super(LogStringHandler, self).__init__()
self.target_widget = target_widget
def emit(self, record):
self.target_widget.append(record.asctime + ' -- ' + record.getMessage())
class TestWindow(QMainWindow, test_ui_class):
def __init__(self):
super().__init__()
self.setupUi(self)
logger = logging.getLogger()
logger.addHandler(LogStringHandler(self.testTextBrowser))
# 이벤트 연결
self.testButton.clicked.connect(self.clicked_test_button)
def clicked_test_button(self):
message_alert = self.test_logging()
QMessageBox.about(self, 'testButton 눌림 알람', message_alert)
def test_logging(self):
total_repeat_count = int(self.countTempDummy.text() if self.countTempDummy.text() != '' else 0)
if total_repeat_count <= 0:
return '출력 대상이 없음'
for i in range(0, total_repeat_count):
logging.error('Error %s ' % i)
logging.info('Info %s ' % i)
logging.warning('Warning %s ' % i)
logging.debug('Debug %s ' % i)
return '로그 출력 완료'
if __name__ == "__main__":
app = QApplication(sys.argv)
test_window = TestWindow()
test_window.show()
app.exec_()
'프로그래밍' 카테고리의 다른 글
PyQt5 QtTableWidget 값 변경 후 값 너비로 컬럼 크기 조정 (0) | 2021.01.03 |
---|---|
QtDesigner로 작성한 ui파일 로드 후 이벤트 주입 및 다루기 (0) | 2021.01.01 |
QtDesigner로 만든 .ui파일을 .py로 바꾸지 않고 사용하기 (0) | 2020.12.30 |
직접코딩으로 PyQt 윈도우를 구성해보자 (0) | 2020.12.29 |
python dictionary의 키만 복사 사용 (0) | 2020.12.22 |