로그인

  • 목록
  • 아래로
  • 위로
  • 쓰기
  • 검색

정보&강의 FormLayout 레이아웃 사용

첨부 1

  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을 사용함.

 

pyside2.png

 

 

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"]

 


이런 글도 찾아보세요!

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다. 로그인

신고

"님의 댓글"

이 댓글을 신고 하시겠습니까?

삭제

"님의 댓글"

이 댓글을 삭제하시겠습니까?