pyside2의 formLayout() 사용하기
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt #레이블의 정렬을 위해서는 Qt를 import함. 기본 왼쪽 정렬
class Form(QWidget):
def __init__(self):
super(Form, self).__init__()
self.form = QFormLayout() #Label과 widget으로 구성됨.
self.setLayout(self.form) # 현재 창에 self.form 객체를 설정함.
# self.form.setHorizontalSpacing(20) #레이블과 위젯간의 여백을 조절함.
self.form.setVerticalSpacing(10) #컨트롤 간의 여백을 조절함.
# Qt.AlignRight / Qt.AlignLeft
self.form.setLabelAlignment(Qt.AlignCenter) #기본 왼쪽 정렬,
# 컨트롤 객체 생성
self.lnName = QLineEdit()
self.lnPNum2 = QLineEdit()
self.lnId = QLineEdit()
self.btnFindId = QPushButton("중복검사")
self.lblChkId = QLabel("ID 중복검사를 진행해주세요")
self.btnOk = QPushButton("확인")
self.spAge = QSpinBox() #
self.spAge.setValue(19)
self.lnPNum = QLineEdit()
# QHBoxLayout()로 수평박스 레이아웃 생성, 이후 form에 addRow로 추가 될 것임.
self.vbId = QHBoxLayout() #수평박스 생성
self.vbId.addWidget(self.lnId)
self.vbId.addWidget(self.btnFindId)
# form 객체에 컨트롤 추가
self.form.addRow("이름: ", self.lnName)
self.form.addRow("ID: ", self.vbId)
self.form.addWidget(self.lblChkId) # form에서 좌측 이름없이 컨트롤만 추가할 때는 addWidget을 사용함.
self.form.addRow("나이: ", self.spAge)
self.form.addRow("연락처: ", self.lnPNum)
self.form.addRow("보호자연락처: ", self.lnPNum2)
self.form.addRow(self.btnOk)
# 컨트롤에 이벤트 추가
self.spAge.valueChanged[int].connect(self.chk_age)
self.btnFindId.clicked.connect(self.chk_id)
self.btnOk.clicked.connect(self.chk_ok)
def chk_age(self, v):
if v < 20:
self.lnPNum2.setEnabled(True)
else:
self.lnPNum2.setEnabled(False)
def chk_id(self):
if len(self.lnId.text()) < 2:
self.lblChkId.setText("2글자 이상 입력하세요")
else:
if ids.count(self.lnId.text()) == 1: # class 밖의 리스트 ids를 참조할 수 있음.
self.lblChkId.setText("중복되는 ID가 존재합니다")
else:
self.lblChkId.setText("멋진 ID네요!")
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("처리되었습니다")
ids = ["return", "zero", "abc", "python", "class"]
app = QApplication([])
form = Form()
form.show()
sys.exit(app.exec_())
import sys
from PySide2.QtWidgets import *
from PySide2.QtCore import Qt #레이블의 정렬을 위해서는 Qt를 import함. 기본 왼쪽 정렬
PySide2.QtWidgets import *
모든 메소드를 호출한다.
이건 개발할 때 시작하기 좋은 것이고, 이후에는 별도로 메소드를 따로 호출하는게 좋다.
from PySide2.QtCore import Qt
레이블에 정렬을 줘야 할 때가 있는데 이때 QT가 필요하다.
self.form = QFormLayout() #Label과 widget으로 구성됨.
self.setLayout(self.form) # 현재 창에 self.form 객체를 설정함.
# self.form.setHorizontalSpacing(20) #레이블과 위젯간의 여백을 조절함.
self.form.setVerticalSpacing(10) #컨트롤 간의 여백을 조절함.
# Qt.AlignRight / Qt.AlignLeft
self.form.setLabelAlignment(Qt.AlignCenter)
self.form = QFormLayout()
QFormLayout()을 상속받는 self.form 객체를 생성한다.
self.setLayout(self.form)
self.form 객체를 현재창의 레이아웃으로 설정한다.
self.form.setVerticalSpacing(10)
self.form 객체의 컨트롤간의 간격을 설정한다.
self.form.setHorizontalSpacing(20)
self.form 객체의 레이블과 위젯간의 간격을 설정한다.
self.lnName = QLineEdit()
self.lnPNum2 = QLineEdit()
self.lnId = QLineEdit()
self.btnFindId = QPushButton("중복검사")
self.lblChkId = QLabel("ID 중복검사를 진행해주세요")
self.btnOk = QPushButton("확인")
self.spAge = QSpinBox() #
self.spAge.setValue(19)
self.lnPNum = QLineEdit()
컨트롤을 만든다.
QLineEdit(), QPushButton(), QLabel(), QSpinBox()
self.vbId = QHBoxLayout() #수평박스 생성
self.vbId.addWidget(self.lnId)
self.vbId.addWidget(self.btnFindId)
QFormLayout()의 위젯에 사용할 수평박스 레이아웃을 만듬.
즉 수평박스, 수직박스 레이아웃은 하나의 위젯처럼 사용이 가능함.
# form 객체에 컨트롤 추가
self.form.addRow("이름: ", self.lnName)
self.form.addRow("ID: ", self.vbId)
self.form.addWidget(self.lblChkId) # form에서 좌측 이름없이 컨트롤만 추가할 때는 addWidget을 사용함.
self.form.addRow("나이: ", self.spAge)
self.form.addRow("연락처: ", self.lnPNum)
self.form.addRow("보호자연락처: ", self.lnPNum2)
self.form.addRow(self.btnOk)
self.form() 객체에 컨트롤을 추가함. 2가지 중요한 포인트가 있음.
self.form.addRow("ID: ", self.vbId)
수평(수직)박스 레이아웃도 addRow로 위젯에 추가될 수 있음.
self.form.addWidget(self.lblChkId)
레이블이 없이 컨트롤만 추가할 때는 addWidget을 사용함.
self.spAge.valueChanged[int].connect(self.chk_age)
self.btnFindId.clicked.connect(self.chk_id)
self.btnOk.clicked.connect(self.chk_ok)
self.spAge.valueChanged[int]
QSpinBox()를 상속받은 컨트롤의 이벤트 int 정수로 값이 변한다.
def chk_age(self, v):
if v < 20:
self.lnPNum2.setEnabled(True)
else:
self.lnPNum2.setEnabled(False)
.setEnabled(False)
컨트롤의 입력이 비활성화된다.
def chk_id(self):
if len(self.lnId.text()) < 2:
self.lblChkId.setText("2글자 이상 입력하세요")
else:
if ids.count(self.lnId.text()) == 1: # class 밖의 리스트 ids를 참조할 수 있음.
self.lblChkId.setText("중복되는 ID가 존재합니다")
else:
self.lblChkId.setText("멋진 ID네요!")
if ids.count(self.lnId.text()) == 1:
ids는 self class 밖에 존재하는 리스트값이다.
ids = ["return", "zero", "abc", "python", "class"]