logging과 PyQt5를 사용하여 로그창 구현Qt/PyQt5 강좌2023. 10. 22. 05:43
Table of Contents
반응형
logging과 PyQt5를 사용하여 로그창을 구현한 예제입니다. 텍스트 파일에도 로그창에 보이는 내용이 따로 저장됩니다.
2022. 07. 21 최초작성
2022. 10. 30 한글 메시지 저장시 깨지는 현상 해결
2023. 06. 14 최종수정 - QTextEditLogger에 보여지는 로그 지우는 버튼 추가
Test Me 버튼을 클릭하면 로그가 추가됩니다.
Clear 버튼을 클릭하면 QTextEditLogger에 보여지던 로그가 모두 지워집니다.
전체 소스코드입니다.
import sys from PyQt5 import QtWidgets import logging date_strftime_format = "%d-%b-%y %H:%M:%S" message_format = "%(asctime)s - %(levelname)s : %(message)s" logging.basicConfig(filename='log.log', level=logging.INFO, format=message_format, datefmt=date_strftime_format, encoding='utf-8') class QTextEditLogger(logging.Handler): def __init__(self, parent): super().__init__() self.widget = QtWidgets.QPlainTextEdit(parent) self.widget.setReadOnly(True) self.widget.setFixedHeight(150) self.widget.verticalScrollBar().setValue( self.widget.verticalScrollBar().maximum()) def emit(self, record): msg = self.format(record) self.widget.appendPlainText(msg) self.widget.ensureCursorVisible() self.widget.viewport().update() def clear(self): self.widget.clear() class MyDialog(QtWidgets.QDialog, QtWidgets.QPlainTextEdit): def __init__(self, parent=None): super().__init__(parent) self.logTextBox = QTextEditLogger(self) self.logTextBox.setFormatter(logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')) logging.getLogger().addHandler(self.logTextBox) logging.getLogger().setLevel(logging.DEBUG) self._button1 = QtWidgets.QPushButton(self) self._button1.setText('Test Me') self._button2 = QtWidgets.QPushButton(self) self._button2.setText('Clear') layout = QtWidgets.QVBoxLayout() layout.addWidget(self.logTextBox.widget) layout.addWidget(self._button1) layout.addWidget(self._button2) self.setLayout(layout) self._button1.clicked.connect(self.test) self._button2.clicked.connect(self.clear) def test(self): logging.debug('test 안녕') def clear(self): self.logTextBox.clear() if __name__ == "__main__": app = QtWidgets.QApplication(sys.argv) dlg = MyDialog() dlg.show() dlg.raise_() sys.exit(app.exec_()) |
원본 코드
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
PyQt5 그래프 그리기 - PyQtGraph 예제 (14) | 2024.02.05 |
---|---|
PyQt5와 QML을 사용하는 간단한 예제 (0) | 2023.12.11 |
PyQT5에서 slot이 thread-safe인지 테스트 해봤습니다 (0) | 2023.10.22 |
QApplication의 인스턴스를 생성할 때 sys.argv를 전달해야 하는 이유 (0) | 2023.10.22 |
PyQt5 예제 - QTreeView으로 json 로드하기 및 저장하기 (0) | 2023.10.22 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!