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_())

 

반응형