정수를 읽어서 한글로 변환해주는 pyQt5 예제Qt/PyQt5 강좌2024. 8. 18. 22:45
Table of Contents
반응형
정수를 읽어서 한글로 변환해주는 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_()) # 이벤트 루프 시작 |
반응형
'Qt > PyQt5 강좌' 카테고리의 다른 글
pyQt5 윈도우를 화면의 중앙에 배치하기 (0) | 2024.08.19 |
---|---|
pyQt5 QSlider 예제 (0) | 2024.08.19 |
정수 입력시 천 단위로 콤마를 추가해주는 pyQt5 예제 (0) | 2024.08.17 |
pyQt5 QTableWidget 예제 코드 (0) | 2024.08.16 |
PyQt5 검색창 UI 예제 (0) | 2024.08.12 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
@webnautes :: 멈춤보단 천천히라도
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!