Qt/PyQt5 강좌
정수 입력시 천 단위로 콤마를 추가해주는 pyQt5 예제
webnautes
2024. 8. 17. 22:39
반응형
정수를 입력시 천 단위로 콤마를 실시간으로 추가해주는 pyQt5 예제입니다.
2024. 8. 13 최초작성
import sys from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout from PyQt5.QtGui import QIntValidator # QLineEdit를 상속받아 사용자 정의 위젯을 만듭니다. class ThousandsSeparatorEdit(QLineEdit): def __init__(self, parent=None): super().__init__(parent) # 입력가능한 최소(0), 최대값(999999999) 지정 self.setValidator(QIntValidator(0, 999999999, self)) # 텍스트가 변경될 때마다 format_text 메서드를 호출합니다. self.textChanged.connect(self.format_text) def format_text(self): # 현재 커서 위치를 저장합니다. cursor_pos = self.cursorPosition() # 텍스트에서 콤마를 모두 제거합니다. 결과적으로 콤마가 입력안됩니다. text = self.text().replace(',', '') # 천 단위 콤마를 추가한 새 문자열을 생성합니다. 텍스트가 비어있으면 빈 문자열을 반환합니다. formatted_text = '{:,}'.format(int(text)) if text else '' # 포맷된 텍스트를 설정합니다. self.setText(formatted_text) # 커서 위치를 조정합니다. 새로 추가된 콤마의 수만큼 커서를 오른쪽으로 이동시킵니다. # 입력한 텍스트 오른쪽 끝에 커서가 위치하게 됩니다. self.setCursorPosition(cursor_pos + formatted_text.count(',', 0, cursor_pos)) # 메인 윈도우 클래스를 정의합니다. class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): # 윈도우의 크기를 200x100 픽셀로 고정합니다. self.setFixedSize(200,100) # 수직 박스 레이아웃을 생성합니다. layout = QVBoxLayout() # ThousandsSeparatorEdit 위젯을 생성합니다. self.edit = ThousandsSeparatorEdit(self) # 레이아웃에 위젯을 추가합니다. layout.addWidget(self.edit) # 윈도우에 위젯을 설정합니다. self.setLayout(layout) # 윈도우 제목을 설정합니다. self.setWindowTitle('천 단위 콤마 예제') # 윈도우를 화면에 표시합니다. self.show() if __name__ == '__main__': # QApplication 객체를 생성합니다. app = QApplication(sys.argv) # MainWindow 객체를 생성합니다. ex = MainWindow() # 이벤트 루프를 시작하고 애플리케이션이 종료되면 시스템에 종료코드를 반환합니다. sys.exit(app.exec_()) |
반응형