일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- SK텔레콤
- 코스피
- 월패드
- 홈네트워크
- 나스닥
- 국내주식
- 티스토리챌린지
- 현대통신
- 해외주식
- Bestin
- esp32
- 파이썬
- Apple
- cluster
- 힐스테이트 광교산
- homebridge
- Espressif
- matter
- 애플
- 매터
- 미국주식
- 오블완
- Home Assistant
- MQTT
- 공모주
- ConnectedHomeIP
- 배당
- raspberry pi
- Python
- RS-485
- Today
- Total
YOGYUI
PyQt5 - QTextEdit Tab Width 설정하기 본문
대부분의 통합개발환경(IDE)는 텍스트 에디트의 탭('\t') 길이(크기)를 설정할 수 있는 옵션이 있다
(들여쓰기를 위해 주로 사용)
Qt의 QTextEdit 위젯의 Tab(탭) 길이를 변경하는 방법을 알아보자
우선 탭의 공백 길이가 Default는 어느 정도 되는지 알아보기 위해 다음과 같이 코드를 작성해봤다
하나의 스페이스와 일반 문자열의 가로 폭을 동일하게 표현하기 위해 Monospaced 폰트 중 하나의 'D2Coding'을 활용했다
https://github.com/naver/d2codingfont
if __name__ == '__main__':
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
edit = QTextEdit()
font = QFont('D2Coding')
font.setPointSize(14)
edit.setFont(font)
text_list = [
" after 4 blank",
"\tafter 1 tab",
" after 8 blank",
"\t\tafter 2 tab",
]
edit.setText('\n'.join(text_list))
edit.show()
app.exec_()
하나의 탭이 8개의 스페이스보다 공백이 더 긴것을 확인할 수 있다
탭 공백은 QTextEdit의 tabStopWidth 메서드로 확인할 수 있다
In [1]: edit.tabStopWidth()
Out[1]: 80
이제 하나의 탭이 4개의 스페이스와 동일한 공백을 가지도록 설정해보자
필요한 것은 QtGui의 QFontMetrics 객체와 QTextEdit의 setTabStopWidth 메서드 두 개이다
edit.setTabStopWidth(QFontMetrics(font).width(' ' * 4))
코드에 다음 한줄만 추가하면 된다
> QFontMetrics를 통해 D2Coding 글꼴로 설정된 font 객체로 쓰여진 4개의 공백 (' ' * 4) 문자열의 폭(width)을 구해서 이를 QTextEdit의 tabStopWidth 값으로 설정하는 구문이다
위 코드를 추가한 뒤 실행해보면 결과는 다음과 같다
코딩용 IDE와 같이 4개의 스페이스가 하나의 탭과 공백의 길이가 같아진 것을 확인할 수 있다
In [2]: edit.tabStopWidth()
Out[2]: 36
전체 코드는 다음과 같다
if __name__ == '__main__':
import sys
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
app = QCoreApplication.instance()
if app is None:
app = QApplication(sys.argv)
edit = QTextEdit()
font = QFont('D2Coding')
font.setPointSize(14)
edit.setFont(font)
edit.setTabStopWidth(QFontMetrics(font).width(' ' * 4))
text_list = [
" after 4 blank",
"\tafter 1 tab",
" after 8 blank",
"\t\tafter 2 tab",
]
edit.setText('\n'.join(text_list))
edit.show()
app.exec_()
P.S) Python은 코딩 스탠다드상, PyCharm이나 Spyder, Jupyter, VS Code 등 IDE는 탭을 스페이스로 치환해버린다
끝~!
[참고]
https://stackoverflow.com/questions/13027091/how-to-override-tab-width-in-qt
'Software > Python' 카테고리의 다른 글
Python - 윈도OS 환경 변수 변경하기 (Modify Environment Variables) (1) | 2021.08.17 |
---|---|
PyQt5 - Connect pyqtSignal in For loop (lambda problem) (0) | 2021.07.20 |
Python - Decorator in Class (0) | 2021.07.05 |
PyQt5 - QDoubleSpinbox 더블클릭 시 텍스트 전체선택 (0) | 2021.06.21 |
PyQt5 - QTableWidget Column Header Label 가져오기 (0) | 2021.06.21 |