군침이 싹 도는 코딩

PySide2 레이아웃 ( Form Layout ) 본문

Python/Pycharm

PySide2 레이아웃 ( Form Layout )

mugoori 2023. 5. 26. 14:33
	# 폼 레이아웃 생성
        self.form = QFormLayout()
        # 메인 폼의 메인 레이아웃으로 지정 ( 이때 화면의 크기가 최소화 된다 )
        self.setLayout(self.form)

 

 

	# 라인 에딧을 생성
        self.lnName = QLineEdit()
        # 라인 에딧을 폼 레이아웃에 넣어준다
        self.form.addRow("이름 : ", self.lnName)

 

 

	# 라인 에딧2를 생성
        self.lnPNum2 = QLineEdit()
        # 라인 에딧2를 폼 레이아웃에 넣어준다
        self.form.addRow('보호자연락처: ', self.lnPNum2)

 

 

	# 라인 에딧 추가
        self.lnId = QLineEdit()
        # 버튼 추가
        self.btnFindId = QPushButton('중복검사')

        # H 박스 생성
        self.vbId = QHBoxLayout()
        # H 박스에 라인 에딧과 버튼 넣기
        self.vbId.addWidget(self.lnId)
        self.vbId.addWidget(self.btnFindId)

        # 폼에 H 박스 넣기
        self.form.addRow("ID: ", self.vbId)

 

 

	# 레이블을 추가한다
        self.lblChkId = QLabel('ID 중복검사를 진행해주세요')

        # 레이블을 폼 레이아웃에 넣는다
        self.form.addWidget(self.lblChkId)

 

 

	# 버튼을 만든다
        self.btnOk = QPushButton('확인')
        
        # 폼 레이아웃에 버튼을 addRow로 넣는다 ( 이렇게 넣으면 전체 너비를 가진 형태로 들어간다 )
        self.form.addRow(self.btnOk)

 

 

	# 스핀 박스를 생성 ( 화살표를 누르면 값을 올리고 내릴 수 있는 박스 )
        self.spAge = QSpinBox()
        # 스핀 박스의 디폴트값 설정
        self.spAge.setValue(19)
        # 라인 에딧 생성
        self.lnPNum = QLineEdit()

        # 폼 레이아웃에 스핀 박스와 라인 에딧 넣기
        self.form.addRow('나이: ', self.spAge)
        self.form.addRow('연락처: ', self.lnPNum)

 

 

	# 위젯들 사이의 수직 간격 조정을 해주는 메서드 단위는 px 이다
        self.form.setVerticalSpacing(20)

 

 

from PySide2.QtCore import Qt
	# 레이블의 정렬 상태를 변경해주는 메서드
        self.form.setLabelAlignment(Qt.AlignCenter)

 

 

	# 메서드를 연결
        self.spAge.valueChanged[int].connect(self.chk_age)

    # 나이가 20살보다 많다면 보호자 연락처 컨트롤을 비활성 시키는 메서드를 작성
    def chk_age(self, v):
        if v < 20 :
            self.lnPNum2.setEnabled(True)
        else:
            self.lnPNum2.setEnabled(False)

 

 

 

 

import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt

class Form(QWidget):
    def __init__(self):
        super(Form, self).__init__()

        # 폼 레이아웃 생성
        self.form = QFormLayout()
        # 메인 폼의 메인 레이아웃으로 지정 ( 이때 화면의 크기가 최소화 된다 )
        self.setLayout(self.form)
        # 라인 에딧을 생성
        self.lnName = QLineEdit()
        # 라인 에딧을 폼 레이아웃에 넣어준다
        self.form.addRow("이름 : ", self.lnName)
        # 라인 에딧2를 생성
        self.lnPNum2 = QLineEdit()
        # 라인 에딧2를 폼 레이아웃에 넣어준다
        self.form.addRow('보호자연락처: ', self.lnPNum2)
        # 라인 에딧 추가
        self.lnId = QLineEdit()
        # 버튼 추가
        self.btnFindId = QPushButton('중복검사')

        # H 박스 생성
        self.vbId = QHBoxLayout()
        # H 박스에 라인 에딧과 버튼 넣기
        self.vbId.addWidget(self.lnId)
        self.vbId.addWidget(self.btnFindId)

        # 폼에 H 박스 넣기
        self.form.addRow("ID: ", self.vbId)

        # 레이블을 추가한다
        self.lblChkId = QLabel('ID 중복검사를 진행해주세요')

        # 레이블을 폼 레이아웃에 넣는다
        self.form.addWidget(self.lblChkId)

        # 버튼을 만든다
        self.btnOk = QPushButton('확인')

        # 폼 레이아웃에 버튼을 addRow로 넣는다 ( 이렇게 넣으면 전체 너비를 가진 형태로 들어간다 )
        self.form.addRow(self.btnOk)

        # 스핀 박스를 생성 ( 화살표를 누르면 값을 올리고 내릴 수 있는 박스 )
        self.spAge = QSpinBox()
        # 스핀 박스의 디폴트값 설정
        self.spAge.setValue(19)
        # 라인 에딧 생성
        self.lnPNum = QLineEdit()

        # 폼 레이아웃에 스핀 박스와 라인 에딧 넣기
        self.form.addRow('나이: ', self.spAge)
        self.form.addRow('연락처: ', self.lnPNum)

        # 위젯들 사이의 수직 간격 조정을 해주는 메서드
        self.form.setVerticalSpacing(20)

        # 레이블의 정렬 상태를 변경해주는 메서드
        self.form.setLabelAlignment(Qt.AlignCenter)

        # 메서드를 연결
        self.spAge.valueChanged[int].connect(self.chk_age)

        # ids 라는 리스트를 만든다
        ids = ['return', 'zero', 'abc', 'python', 'class']

        # chk_id 라는 메서드를 버튼에 연결한다
        self.btnFindId.clicked.connect(lambda: self.chk_id(ids))

        self.btnOk.clicked.connect(self.chk_ok)

    # 확인 버튼에 각 항목을 체크할 수 있는 기능을 가진 메서드를 구현
    def chk_ok(self):
        str = ''
        if self.lnName.text() == '':
            str += '이름 '
        if self.lblChkId.text() != '멋진 ID네요!':
            str += 'ID '
        if len(self.lnPNum.text()) < 13:
            str += '연락처 '
        if str != '':
            self.btnOk.setText(str+'을 확인하세요')
        else:
            self.btnOk.setText('처리되었습니다')


    # 아이디 글자수 제한과 중복된 아이디를 걸러주는 메서드를 작성
    def chk_id(self, ids):

            if len(self.lnId.text()) < 2:
                self.lblChkId.setText('2글자 이상 입력하세요')
            else:
                if ids.count(self.lnId.text()) == 1:
                    self.lblChkId.setText('중복되는 ID가 존재합니다')
                else:
                    self.lblChkId.setText('멋진 ID네요!')


    # 나이가 20살보다 많다면 보호자 연락처 컨트롤을 비활성 시키는 메서드를 작성
    def chk_age(self, v):
            if v < 20 :
                self.lnPNum2.setEnabled(True)
            else:
                self.lnPNum2.setEnabled(False)

app = QApplication([])
form = Form()
form.show()
sys.exit(app.exec_())

'Python > Pycharm' 카테고리의 다른 글

pycharm 을 이용해서 패키징을 할 때 오류 해결  (0) 2023.06.08
PySide2 레이아웃 ( Grid Layout )  (0) 2023.05.26
간단한 팁  (0) 2023.05.26
Pyside2 레이아웃 ( Box Layout )  (0) 2023.05.26
PyQt5 배포 파일 만들기  (0) 2023.05.26