반응형
QLineEdit 소개
PySide6의 QLineEdit은
사용자가 한 줄의 텍스트를 입력하고 편집할 수 있는
가장 기본적인 위젯입니다.
단순해 보이지만 다양한 메서드를 통해 텍스트 입력을 세밀하게 제어할 수 있습니다.
이 글에서는 QLineEdit의 주요 메서드들을 카테고리별로 살펴보고
실제 사용 예시를 통해 활용법을 알아보겠습니다.
기본적인 QLineEdit 위젯은 다음과 같이 생성할 수 있습니다:
from PySide6.QtWidgets import QLineEdit
line_edit = QLineEdit()
line_edit.setPlaceholderText("여기에 텍스트를 입력하세요")
텍스트 관리 메서드
기본 텍스트 메서드
QLineEdit의 가장 기본적인 기능은 텍스트를 설정하고 가져오는 것입니다.
이와 관련된 주요 메서드는 다음과 같습니다:
- text() - 현재 텍스트 내용을 반환합니다.
- setText(text) - 새 텍스트를 설정합니다.
- clear() - 모든 텍스트를 지웁니다.
- displayText() - 화면에 표시되는 텍스트를 반환합니다(에코 모드에 따라 다를 수 있음).
line_edit = QLineEdit()
line_edit.setText("안녕하세요")
print(line_edit.text()) # 출력: 안녕하세요
line_edit.clear()
print(line_edit.text()) # 출력: ""
텍스트 선택 메서드
QLineEdit은 텍스트 선택과 관련된 다양한 메서드를 제공합니다:
- selectAll() - 모든 텍스트를 선택합니다.
- selectedText() - 현재 선택된 텍스트를 반환합니다.
- selectionStart() - 선택 영역의 시작 위치를 반환합니다.
- setSelection(start, length) - 지정된 위치에서 시작하여 지정된 길이만큼 텍스트를 선택합니다.
line_edit = QLineEdit("PySide6 프로그래밍")
line_edit.setSelection(0, 7) # "PySide6" 부분만 선택
print(line_edit.selectedText()) # 출력: "PySide6"
print(line_edit.selectionStart()) # 출력: 0
line_edit.selectAll() # 모든 텍스트 선택
print(line_edit.selectedText()) # 출력: "PySide6 프로그래밍"
💡 팁: selectionStart()는 선택이 없을 경우 -1을 반환합니다. 이 값을 활용하여 텍스트가 선택되었는지 확인할 수 있습니다.
커서 관련 메서드
텍스트 입력 시 커서 위치를 제어하는 메서드들입니다:
- cursorPosition() - 현재 커서 위치를 반환합니다.
- setCursorPosition(pos) - 커서 위치를 설정합니다.
- cursorForward(mark, steps) - 커서를 앞으로 이동합니다.
- cursorBackward(mark, steps) - 커서를 뒤로 이동합니다.
- home(mark) - 커서를 텍스트의 시작 부분으로 이동합니다.
- end(mark) - 커서를 텍스트의 끝으로 이동합니다.
line_edit = QLineEdit("Hello World")
line_edit.setCursorPosition(5) # 커서를 'W' 앞에 위치시킴
print(line_edit.cursorPosition()) # 출력: 5
line_edit.cursorForward(True, 3) # 커서를 3칸 앞으로 이동하며 텍스트 선택
print(line_edit.selectedText()) # 출력: "Wor"
line_edit.home(False) # 커서를 시작 위치로 이동 (선택 없음)
print(line_edit.cursorPosition()) # 출력: 0
line_edit.end(False) # 커서를 끝 위치로 이동
print(line_edit.cursorPosition()) # 출력: 11
반응형
입력 제어 메서드
입력 제한 메서드
QLineEdit은 사용자 입력을 다양한 방식으로 제한하고 검증할 수 있습니다:
- setMaxLength(length) - 최대 텍스트 길이를 설정합니다.
- maxLength() - 현재 설정된 최대 텍스트 길이를 반환합니다.
- setInputMask(mask) - 입력 마스크를 설정합니다(예: 전화번호 형식).
- inputMask() - 현재 설정된 입력 마스크를 반환합니다.
- setValidator(validator) - 입력 유효성 검사기를 설정합니다.
- validator() - 현재 설정된 유효성 검사기를 반환합니다.
from PySide6.QtGui import QIntValidator, QDoubleValidator, QRegularExpressionValidator
from PySide6.QtCore import QRegularExpression
# 최대 길이 설정
line_edit = QLineEdit()
line_edit.setMaxLength(10) # 최대 10자까지만 입력 가능
print(line_edit.maxLength()) # 출력: 10
# 입력 마스크 설정 (전화번호 형식)
phone_edit = QLineEdit()
phone_edit.setInputMask("000-0000-0000") # 한국 전화번호 형식
print(phone_edit.inputMask()) # 출력: "000-0000-0000"
# 유효성 검사기 설정
int_edit = QLineEdit()
int_edit.setValidator(QIntValidator(0, 100)) # 0~100 사이의 정수만 입력 가능
# 이메일 형식 검증
email_edit = QLineEdit()
email_regex = QRegularExpression("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
email_edit.setValidator(QRegularExpressionValidator(email_regex))
💡 입력 마스크 팁: 입력 마스크에서 0은 필수 숫자, 9는 선택적 숫자, A는 필수 알파벳, a는 선택적 알파벳, X는 필수 알파벳 또는 숫자, x는 선택적 알파벳 또는 숫자를 의미합니다. 백슬래시(\)를 사용하여 특수 문자를 이스케이프할 수 있습니다.
에코 모드 메서드
에코 모드는 사용자가 입력한 텍스트가 화면에 어떻게 표시될지를 결정합니다:
- setEchoMode(mode) - 에코 모드를 설정합니다.
- echoMode() - 현재 에코 모드를 반환합니다.
에코 모드 옵션:
- QLineEdit.Normal - 입력된 그대로 표시 (기본값)
- QLineEdit.NoEcho - 아무것도 표시하지 않음
- QLineEdit.Password - 별표나 점으로 표시 (비밀번호용)
- QLineEdit.PasswordEchoOnEdit - 편집 중에만 문자를 표시하고 나머지는 마스킹
from PySide6.QtWidgets import QLineEdit
# 일반 텍스트 입력
normal_edit = QLineEdit()
normal_edit.setEchoMode(QLineEdit.Normal)
# 비밀번호 입력
password_edit = QLineEdit()
password_edit.setEchoMode(QLineEdit.Password)
password_edit.setPlaceholderText("비밀번호를 입력하세요")
# 편집 중에만 표시되는 비밀번호
password_edit2 = QLineEdit()
password_edit2.setEchoMode(QLineEdit.PasswordEchoOnEdit)
password_edit2.setPlaceholderText("편집 중에만 표시되는 비밀번호")
# 완전히 숨겨진 입력 (보안 코드 등)
hidden_edit = QLineEdit()
hidden_edit.setEchoMode(QLineEdit.NoEcho)
hidden_edit.setPlaceholderText("입력이 표시되지 않습니다")
실용적인 예제
다음은 지금까지 배운 메서드들을 활용한 실용적인 예제입니다:
예제 1: 회원가입 폼의 입력 필드
import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel, QPushButton
from PySide6.QtGui import QRegularExpressionValidator
from PySide6.QtCore import QRegularExpression
class RegistrationForm(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("회원가입 폼")
self.setup_ui()
def setup_ui(self):
layout = QVBoxLayout(self)
# 사용자 이름 입력 필드 (최대 20자)
layout.addWidget(QLabel("사용자 이름:"))
self.username_edit = QLineEdit()
self.username_edit.setMaxLength(20)
self.username_edit.setPlaceholderText("사용자 이름 (최대 20자)")
layout.addWidget(self.username_edit)
# 이메일 입력 필드 (이메일 형식 검증)
layout.addWidget(QLabel("이메일:"))
self.email_edit = QLineEdit()
email_regex = QRegularExpression("[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")
self.email_edit.setValidator(QRegularExpressionValidator(email_regex))
self.email_edit.setPlaceholderText("example@email.com")
layout.addWidget(self.email_edit)
# 비밀번호 입력 필드
layout.addWidget(QLabel("비밀번호:"))
self.password_edit = QLineEdit()
self.password_edit.setEchoMode(QLineEdit.Password)
self.password_edit.setPlaceholderText("비밀번호를 입력하세요")
layout.addWidget(self.password_edit)
# 전화번호 입력 필드 (마스크 적용)
layout.addWidget(QLabel("전화번호:"))
self.phone_edit = QLineEdit()
self.phone_edit.setInputMask("000-0000-0000")
self.phone_edit.setPlaceholderText("010-1234-5678")
layout.addWidget(self.phone_edit)
# 제출 버튼
submit_btn = QPushButton("가입하기")
submit_btn.clicked.connect(self.submit_form)
layout.addWidget(submit_btn)
self.resize(300, 250)
def submit_form(self):
print(f"사용자 이름: {self.username_edit.text()}")
print(f"이메일: {self.email_edit.text()}")
print(f"비밀번호: {self.password_edit.text()}")
print(f"전화번호: {self.phone_edit.text()}")
if __name__ == "__main__":
app = QApplication(sys.argv)
form = RegistrationForm()
form.show()
sys.exit(app.exec())
예제 2: 실시간 입력 검증
import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLineEdit, QLabel
class LiveValidator(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("실시간 입력 검증")
self.setup_ui()
def setup_ui(self):
layout = QVBoxLayout(self)
# 입력 필드
self.input_edit = QLineEdit()
self.input_edit.setPlaceholderText("영문자와 숫자만 입력하세요")
self.input_edit.textChanged.connect(self.validate_input)
layout.addWidget(self.input_edit)
# 검증 결과 표시 라벨
self.result_label = QLabel("입력을 기다리는 중...")
layout.addWidget(self.result_label)
self.resize(300, 100)
def validate_input(self, text):
# 영문자와 숫자만 허용
if text and all(c.isalnum() for c in text):
self.result_label.setText("유효한 입력입니다!")
self.result_label.setStyleSheet("color: green;")
else:
self.result_label.setText("영문자와 숫자만 입력하세요!")
self.result_label.setStyleSheet("color: red;")
# 마지막 입력 문자가 유효하지 않으면 제거
if text and not text[-1].isalnum():
self.input_edit.setText(text[:-1])
# 커서 위치 조정
self.input_edit.setCursorPosition(len(text) - 1)
if __name__ == "__main__":
app = QApplication(sys.argv)
validator = LiveValidator()
validator.show()
sys.exit(app.exec())
결론
이 글에서는 PySide6의 QLineEdit 위젯의
텍스트 관리와 입력 제어 메서드에 대해 알아보았습니다.
QLineEdit은 단순한 텍스트 입력 필드지만,
다양한 메서드를 활용하면 사용자 입력을 효과적으로 제어하고 검증할 수 있는 강력한 위젯입니다.
텍스트 관리 메서드를 통해 텍스트를 설정하고 가져오며,
선택 영역을 조작하고, 커서 위치를 제어할 수 있습니다.
또한 입력 제어 메서드를 사용하여 최대 길이 제한, 입력 마스크, 유효성 검사 등을 설정할 수 있습니다.
[ 파이썬 관련 블로그 글 목록 ]
파이썬(Python) 블로그 목록
반응형
'PYTHON GUI' 카테고리의 다른 글
[ PySide6 ] QTableWidget 메서드 기본 가이드: 테이블 위젯 기본기 익히기 (2) | 2025.05.21 |
---|---|
[ PySide6 ] QLineEdit 완벽 가이드 (2부) - 시각적 속성과 이벤트 처리 (0) | 2025.05.18 |
[ PySide6 ] 파일 선택 대화상자 활용하기 (1) | 2025.05.17 |
파이썬(Python) GUI 라이브러리 선택 가이드 (2) | 2025.05.06 |
[ PySide6 ] PySide6에서 CSS 사용하기 기본 (0) | 2025.05.04 |