PYTHON GUI

[ PySide6 ] QLineEdit 완벽 가이드 (1부) - 텍스트 관리와 입력 제어

나루하루001 2025. 5. 18. 16:55
반응형



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) 블로그 목록
반응형