본문 바로가기

PYQT5

[파이썬, PYQT5] QLineEdit 생성, 크기 설정, 텍스트 정렬, 배경색 지정, 힌트 (placeholder), 이벤트 (connect) 연결 하는 법

  • 전체 소스
더보기
import sys

from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget, QGridLayout, QLineEdit, \
    QVBoxLayout


class MainScreen(QMainWindow):

    def __init__(self, wid, hei):
        super().__init__()

        self.setWindowTitle("TEST SCREEN")  # 프로젝트 타이틀 설정
        self.setGeometry(0, 0, int(wid * .5), int(hei * .5))  # 화면 사이즈 설정

        self.mainWidget = QWidget()                     # 메인 위젯 생성
        self.mainLayout = QGridLayout(self.mainWidget)  # 메인 레이아웃 생성 및 메인 위젯 연결

        self.setCentralWidget(self.mainWidget)          # 메인윈도우 센트럴위젯에 메인 위젯 연결

        # 라인 에디트 생성
        self.sample1(0, 0)

        # 라인 에디트 크기 지정
        self.sample2(0, 1)

        # 라인 에디트 텍스트 타이핑 정렬 위치 지정
        self.sample3(0, 2)

        # 라인 에디트 백그라운드 컬러 설정
        self.sample4(1, 0)

        # 라인 에디트 힌트(placeholder) 지정
        self.sample5(1, 1)

        # 라인 에디트 이벤트 (connect) 연결
        self.sample6(1, 2)

        self.showMaximized()

    def sample1(self, row, col):
        edt = QLineEdit()   # 라인에디트 생성
        self.mainLayout.addWidget(edt, row, col)  # 메인 레이아웃에 라인에디트 위젯 추가

    def sample2(self, row, col):
        edt = QLineEdit()  # 라인에디트 생성
        edt.setFixedWidth(200)  # 가로 크기 지정
        edt.setFixedHeight(50)  # 세로 크기 지정

        self.mainLayout.addWidget(edt, row, col)  # 메인 레이아웃에 라인에디트 위젯 추가

    def sample3(self, row, col):
        subLayout = QVBoxLayout()
        edt1 = QLineEdit()  # 라인에디트 생성
        edt2 = QLineEdit()  # 라인에디트 생성
        edt3 = QLineEdit()  # 라인에디트 생성


        edt1.setAlignment(Qt.AlignLeft)
        edt2.setAlignment(Qt.AlignCenter)
        edt3.setAlignment(Qt.AlignRight)

        self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
        subLayout.addWidget(edt1)   # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt2)   # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt3)   # 서브레이아웃에 라인에디트 추가

    def sample4(self, row, col):
        subLayout = QVBoxLayout()
        edt1 = QLineEdit()  # 라인에디트 생성
        edt2 = QLineEdit()  # 라인에디트 생성
        edt3 = QLineEdit()  # 라인에디트 생성

        edt1.setStyleSheet("background-color : red")
        edt2.setStyleSheet("background-color : green")
        edt3.setStyleSheet("background-color : blue")

        self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
        subLayout.addWidget(edt1)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt2)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt3)  # 서브레이아웃에 라인에디트 추가

    def sample5(self, row, col):
        subLayout = QVBoxLayout()
        edt1 = QLineEdit()  # 라인에디트 생성
        edt2 = QLineEdit()  # 라인에디트 생성
        edt3 = QLineEdit()  # 라인에디트 생성

        edt1.setPlaceholderText("input name")
        edt2.setPlaceholderText("input age")
        edt3.setPlaceholderText("input dream")

        self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
        subLayout.addWidget(edt1)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt2)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(edt3)  # 서브레이아웃에 라인에디트 추가

    def sample6(self, row, col):
        subLayout = QVBoxLayout()
        self.edt1 = QLineEdit()  # 라인에디트 생성
        self.edt2 = QLineEdit()  # 라인에디트 생성

        self.edt1.textChanged.connect(self.textChanged_event)   # 텍스트 내용이 바뀔때 마다 self.textChanged_event 함수를 호출

        self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
        subLayout.addWidget(self.edt1)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(self.edt2)  # 서브레이아웃에 라인에디트 추가



    def textChanged_event(self):
        self.edt2.setText(self.edt1.text())

if __name__ == '__main__':

    app = QApplication(sys.argv)
    size: QSize = app.primaryScreen().size()    # 모니터 사이즈

    main = MainScreen(size.width()/2, size.height())
    sys.exit(app.exec_())

 

 

 

1. 라인 에디트 (QLineEdit) 생성

edt = QLineEdit()   # 라인에디트 생성
self.mainLayout.addWidget(edt, row, col)  # 메인 레이아웃에 라인에디트 위젯 추가

 

 

생성 및 입력 확인

 

 

 

 

 

 

 

2. 라인 에디트 (QLineEdit) 크기 지정

edt = QLineEdit()  # 라인에디트 생성
edt.setFixedWidth(200)  # 가로 크기 지정
edt.setFixedHeight(50)  # 세로 크기 지정

self.mainLayout.addWidget(edt, row, col)  # 메인 레이아웃에 라인에디트 위젯 추가

 

 

크기 적용 확인

 

 

 

 

 

 

 

 

3. 라인 에디트 (QLineEdit) 텍스트 타이핑 위치 정렬 지정

subLayout = QVBoxLayout()
edt1 = QLineEdit()  # 라인에디트 생성
edt2 = QLineEdit()  # 라인에디트 생성
edt3 = QLineEdit()  # 라인에디트 생성


edt1.setAlignment(Qt.AlignLeft)
edt2.setAlignment(Qt.AlignCenter)
edt3.setAlignment(Qt.AlignRight)

self.mainLayout.addLayout(subLayout, row, col) # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1)   # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2)   # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3)   # 서브레이아웃에 라인에디트 추가

 

 

타이핑 위치 정렬 확인

 

 

 

 

 

 

 

 

4. 라인 에디트 (QLineEdit) 배경 색상 설정

subLayout = QVBoxLayout()
edt1 = QLineEdit()  # 라인에디트 생성
edt2 = QLineEdit()  # 라인에디트 생성
edt3 = QLineEdit()  # 라인에디트 생성

edt1.setStyleSheet("background-color : red")
edt2.setStyleSheet("background-color : green")
edt3.setStyleSheet("background-color : blue")

self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1)  # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2)  # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3)  # 서브레이아웃에 라인에디트 추가

 

배경 색상 확인

 

 

 

 

 

 

5. 라인 에디트 (QLineEdit) 힌트- placeholder 지정

subLayout = QVBoxLayout()
edt1 = QLineEdit()  # 라인에디트 생성
edt2 = QLineEdit()  # 라인에디트 생성
edt3 = QLineEdit()  # 라인에디트 생성

edt1.setPlaceholderText("input name")
edt2.setPlaceholderText("input age")
edt3.setPlaceholderText("input dream")

self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
subLayout.addWidget(edt1)  # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt2)  # 서브레이아웃에 라인에디트 추가
subLayout.addWidget(edt3)  # 서브레이아웃에 라인에디트 추가

 

입력 힌트 확인

 

 

 

 

 

 

 

 

6. 라인 에디트 (QLineEdit) 이벤트 - connect 연결

    def sample6(self, row, col):
        subLayout = QVBoxLayout()
        self.edt1 = QLineEdit()  # 라인에디트 생성
        self.edt2 = QLineEdit()  # 라인에디트 생성

        self.edt1.textChanged.connect(self.textChanged_event)   # 텍스트 내용이 바뀔때 마다 self.textChanged_event 함수를 호출

        self.mainLayout.addLayout(subLayout, row, col)  # 메인 레이아웃에 서브 레이아웃 추가
        subLayout.addWidget(self.edt1)  # 서브레이아웃에 라인에디트 추가
        subLayout.addWidget(self.edt2)  # 서브레이아웃에 라인에디트 추가


    def textChanged_event(self):
        self.edt2.setText(self.edt1.text())

 

간략하게 설명드리면 edt1 에 텍스트를 입력하면 자동으로 textChanged 함수가 호출 됩니다.

여기서 포인트는 textChanged.connect 입니다. 

connect 의 쓰임은 textChanged 가 호출될때 같이 호출해줄 함수가 있다면 connect 함수를 통해서 연결을 해줍니다.

 

그래서 흐름을 보자면...

edt1 에 텍스트가 입력되면 텍스트의 변화를 감지해서 textChanged 함수가 호출 됩니다.

textChanged 함수가 호출되면서 connect 함수로 연결된 함수가 있는지 확인합니다.

textChanged_event 함수가 연결된 것을 확인하고 textChanged_event 함수를 호출 해줍니다.

self.edt2.setText(self.edt1.text()) 가 실행되며 edt1의 텍스트 내용이 edt2에 입력됩니다.

 

edt1 -> edt2 복사