정보&강의
2020.06.06 00:17

FormLayout 레이아웃 사용

조회 수 721 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 게시글 수정 내역 댓글로 가기 인쇄 첨부



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

 




List of Articles
번호 분류 제목 날짜 조회 수 글쓴이
14545 정보&강의 캐논 EOS M 시리즈 클린 HDMI으로 웹캠 기능 사용하기 2020.06.27 605 운영자
14544 정보&강의 ATEM Mini Pro 커스텀 라이브 플렛폼 추가하기 ATEM mini Pro를 컨트롤 하는 ATEM Software Control 프로그램은 XML 파일로 환경을 설정합니다. 그중에서 스트리밍에 관련된 환경파일은 Streaming.xml 입니다. ... file 2020.06.26 228 운영자
14543 가입인사 가입인사드립니다 2020.06.26 137 missiodei
14542 알뜰구매 ATEM MINI PRO (768,580원/무료) ATEM MINI PRO가 70만원 중반대로 구입이 가능합니다. http://search.danawa.com/dsearch.php?query=atem%20mini%20pro&originalQuery=atem%20mini%20pro&volumeT... file 2020.06.24 234 운영자
14541 정보&강의 온라인 자막기 큐시트 생성 및 목록 추가 방법 온라인 자막기에서 큐시트를 만들고, 찬양을 추가하는 방법입니다. 1 file 2020.06.24 371 운영자
14540 정보&강의 온라인 자막기 OBS 적용 방법 안내 기멀전 온라인 ONLINE 자막기 OBS 적용 방법입니다. 1. 기멀전에 로그인 후, 자막기를 띄웁니다. https://godpeople.or.kr/cg/ 녹색 자막기 창이 자동으로 팝업됩... file 2020.06.24 709 운영자
14539 공지 기멀전 유튜브 오픈 기념 무료 벼룩시장 안내 10 2020.06.19 394 운영자
14538 정보&강의 XE, 라이믹스 연동하여 phpSpreadsheet로 엑셀파일 다운로드 시키기 2020.06.15 159 운영자
14537 자유글 큰맘먹고 웹캠 모드 지원되는 hdmi 4채널 믹서기 구입했네요 . 온라인 예배도 준비해야하고, 스마트폰으로 하는 방법도 있겠지만 캡쳐카드없이 4채널 믹스까지 지원되니 구입하게 되었네요. 당장 시작하기에는 zoom 이나 obs, ... 2 file 2020.06.13 212 운영자
14536 질문글 안녕하세요 연락처수집프로그램 다운로드가능할까요 ? 1 secret 2020.06.11 1 모나
14535 가입인사 안녕하세요. 가입하였습니다. 2020.06.09 146 행복과사랑
14534 정보&강의 QStacked Layout 으로 화면이 바뀌는 프로그램 구조 2020.06.06 86 운영자
» 정보&강의 FormLayout 레이아웃 사용 pyside2의 formLayout() 사용하기 import sys from PySide2.QtWidgets import * from PySide2.QtCore import Qt #레이블의 정렬을 위해서는 Qt를 import함. 기본 ... file 2020.06.06 721 운영자
14532 정보&강의 BoxLayout으로 Layout  잡는 방법 BoxLayout으로 Layout 잡을 때 import sys from PySide2.QtWidgets import QApplication, QWidget,\ QLineEdit, QPushButton, QVBoxLayout, QHBoxLayout, QLabel ... file 2020.06.05 83 운영자
14531 정보&강의 pyside2 기본폼 소스 2020.06.05 87 운영자
14530 정보&강의 파이썬 GUI 어떤 것으로 시작하면 좋을까. 2020.06.05 137 운영자
14529 공지 구글 드라이브 종료 안내 2020.06.05 242 운영자
14528 정보&강의 모든 링크 프라이스 수익을 자기 계정으로 적립하는 스크립트 및 php 소스 뽐뿌 및 클리앙등 인터넷상의 모든 링크프라이스 링크를 자신의 링크프라이스 AID 코드로 우회합니다. 링크를 통해 자신이 구입하는 커미션 수익을 본인의 링크프... file 2020.06.04 143 운영자
14527 정보&강의 뽐뿌 링크프라이스를 무력화 하기 각 브라우저별 확장프로그램은 공홈에서 받으세요. https://www.tampermonkey.net/ 뽐뿌 링크프라이스 무력화 소스입니다. // ==UserScript== // @name ppomppu L... file 2020.06.04 196 운영자
14526 질문글 새찬송가wide hd PPT 결재했는데 결재대기로 나옵니다 secret 2020.06.03 0 mana1251
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 731 Next
/ 731