Qt/PyQt5 강좌
정수를 읽어서 한글로 변환해주는 pyQt5 예제
webnautes
2024. 8. 18. 22:45
반응형
정수를 읽어서 한글로 변환해주는 pyQt5 예제입니다.
2024. 8. 13 최초작성
import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel from PyQt5.QtGui import QValidator from PyQt5.QtCore import Qt def num_to_korean(num): units = ['', '일', '이', '삼', '사', '오', '육', '칠', '팔', '구'] # 1~9 한글 표현 tens = ['', '십', '백', '천'] # 십, 백, 천 단위 large_units = ['', '만', '억', '조'] # 만, 억, 조 단위 if num == 0: return '영' # 0일 경우 '영' 반환 result = '' # 결과 문자열 초기화 unit_count = 0 # 큰 단위(만, 억, 조) 카운터 초기화 while num > 0: block = num % 10000 # 4자리씩 블록 나누기 block_result = '' # 현재 블록의 결과 문자열 초기화 for i in range(4): digit = block % 10 # 현재 자릿수 추출 if digit != 0: if i > 0: block_result = tens[i] + block_result # 십, 백, 천 단위 추가 if digit != 1 or i == 0: block_result = units[digit] + block_result # 1~9 한글 표현 추가 block //= 10 # 다음 자릿수로 이동 if block_result: if unit_count > 0: block_result += large_units[unit_count] # 만, 억, 조 단위 추가 result = block_result + result # 전체 결과에 현재 블록 결과 추가 unit_count += 1 # 다음 큰 단위로 이동 num //= 10000 # 다음 4자리 블록으로 이동 return result # 최종 변환 결과 반환 class NumberValidator(QValidator): def validate(self, string, position): if string == "": return (QValidator.Acceptable, string, position) # 빈 문자열 허용 try: num = int(string) if 0 <= num <= 9999_9999_9999_9999: # 0부터 9999999999999999까지 허용 return (QValidator.Acceptable, string, position) except ValueError: pass return (QValidator.Invalid, string, position) # 유효하지 않은 입력 거부 class NumberToKoreanConverter(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): layout = QVBoxLayout() # 수직 레이아웃 생성 self.number_input = QLineEdit() # 입력 필드 생성 self.number_input.setPlaceholderText('0부터 999999999999까지의 정수를 입력하세요') # 빈칸에 보여지는 플레이스 홀더 설정 self.number_input.setValidator(NumberValidator()) # 유효성 검사기 설정 self.number_input.textChanged.connect(self.updateLabel) # 텍스트 변경 시 updateLabel 메서드 연결 layout.addWidget(self.number_input) # 레이아웃에 입력 필드 추가 self.result_label = QLabel('결과가 여기에 표시됩니다') # 결과 표시 라벨 생성 layout.addWidget(self.result_label) # 레이아웃에 결과 라벨 추가 self.setLayout(layout) # 위젯에 레이아웃 설정 self.setWindowTitle('숫자를 한글로 변환') # 윈도우 제목 설정 self.setGeometry(300, 300, 500, 150) # 윈도우 위치와 크기 설정 def updateLabel(self, text): if text: num = int(text) # 입력된 텍스트를 정수로 변환 korean = num_to_korean(num) # 숫자를 한글로 변환 self.result_label.setText(korean) # 결과 라벨에 한글 표현 설정 else: self.result_label.setText('숫자를 입력하세요') # 입력이 없을 경우 안내 메시지 표시 def keyPressEvent(self, event): if event.key() == Qt.Key_Period or event.key() == Qt.Key_Minus: return # 소수점(.)이나 마이너스(-) 키 입력 무시 super().keyPressEvent(event) # 다른 키 입력은 부모 클래스의 이벤트 처리기로 전달 if __name__ == '__main__': app = QApplication(sys.argv) # QApplication 인스턴스 생성 converter = NumberToKoreanConverter() # NumberToKoreanConverter 인스턴스 생성 converter.show() # 윈도우 표시 sys.exit(app.exec_()) # 이벤트 루프 시작 |
반응형