군침이 싹 도는 코딩
PySide2 레이아웃 ( Form Layout ) 본문
# 폼 레이아웃 생성
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 |