정보&강의 FormLayout 레이아웃 사용
- 운영자
- 949
- 0
첨부 1
- pyside2.png (File Size: 5.1KB/Download: 0)
pyside2의 formLayout() 사용하기
import sys 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"]