로그인

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

정보&강의 BoxLayout으로 Layout  잡는 방법


BoxLayout으로 Layout  잡을 때

 

import sys
from PySide2.QtWidgets import QApplication, QWidget,\
    QLineEdit, QPushButton,  QVBoxLayout, QHBoxLayout, QLabel


class Form(QWidget):
    def __init__(self):
        super(Form, self).__init__()
        self.setWindowTitle("구독과 좋아요!")

        # 레이아웃 만들기 QVBoxLayout, QHBoxLayout
        self.vb = QVBoxLayout()
        self.setLayout(self.vb)
        self.hbTop = QHBoxLayout()
        self.hbMid = QHBoxLayout()
        self.hbBot = QHBoxLayout()
        self.vb.addLayout(self.hbTop)
        self.vb.addLayout(self.hbMid)
        self.vb.addStretch() # 윈도우 크기 조절에 따라 자동으로 늘려짐 .addStretch()
        self.vb.addLayout(self.hbBot)

        # 컨트롤 만들기 QLabel, QLineEdit, QPushButton
        self.lbl = QLabel("박스 레이아웃 예제")
        self.ln = QLineEdit()
        self.btn1 = QPushButton("출력")
        self.btn2 = QPushButton("지우기")
        self.btn3 = QPushButton("출력하고 지우기")

        # 컨트롤을 레이아웃에 추가 .addWidget()
        self.hbTop.addWidget(self.lbl)
        self.hbMid.addWidget(self.ln)
        self.hbMid.addWidget(self.btn1)
        self.hbBot.addWidget(self.btn2)
        self.hbBot.addStretch() # 윈도우 크기 조절에 따라 자동으로 늘려짐 .addStretch()
        self.hbBot.addWidget(self.btn3)

        # 이벤트 추가 .clicked.connect()
        self.btn1.clicked.connect(self.prt_line)
        self.btn2.clicked.connect(self.del_line)
        self.btn3.clicked.connect(self.prt_del)

    # 이벤트 함수 .text() .clear() self.함수()
    def prt_line(self):
        print(self.ln.text())

    def del_line(self):
        self.ln.clear()

    def prt_del(self):
        self.prt_line()
        self.del_line()


app = QApplication([])
form = Form()
form.show()
sys.exit(app.exec_())

 

QVBoxLayout()은 세로로 정렬, QHBoxLayout()은 가로로 정렬되는 메소드임.

 

 

# 레이아웃 만들기 QVBoxLayout, QHBoxLayout
self.vb = QVBoxLayout() # QVBoxLayout() 수직박스 레이아웃
self.setLayout(self.vb)
self.hbTop = QHBoxLayout() # QHBoxLayout() 수평박스 레이아웃
self.hbMid = QHBoxLayout()
self.hbBot = QHBoxLayout()
self.vb.addLayout(self.hbTop)
self.vb.addLayout(self.hbMid)
self.vb.addStretch() # 윈도우 크기 조절에 따라 자동으로 늘려짐 .addStretch()
self.vb.addLayout(self.hbBot)

 

self.vb = QVBoxLayout() 수직박스 레이아웃 형태의 self.vb 객체를 만든다.

 

self.setLayout(self.vb) 현재 윈도우의 레이아웃을 self.vb 객체로 설정한다.

 

QHBoxLayout을 이용해서 self.hbTop, self.hbMid , self.hbBot 를 만들고,

.addLayout 을 이용하여 self.vb에 self.hbTop, self.hbMid , self.hbBot를 추가한다.

 

.addLayout를 빼먹지 않는것이 관건.

 

 

# 컨트롤 만들기 QLabel, QLineEdit, QPushButton

self.lbl = QLabel("박스 레이아웃 예제")

self.ln = QLineEdit()

self.btn1 = QPushButton("출력")

self.btn2 = QPushButton("지우기")

self.btn3 = QPushButton("출력하고 지우기")

 

QLabel, QLineEdit, QPushButton 을 이용해서 컨트롤을 만든다. 

컨트롤을 만들었다면 그냥 두면 안되고, 이걸 위에서 만든 레이아웃에 넣어주어야 한다.

아래 코드 확인 할 것.

 

# 컨트롤을 레이아웃에 추가 .addWidget()

self.hbTop.addWidget(self.lbl)

self.hbMid.addWidget(self.ln)

self.hbMid.addWidget(self.btn1)

self.hbBot.addWidget(self.btn2)

self.hbBot.addStretch() # 윈도우 크기 조절에 따라 자동으로 늘려짐 .addStretch()

self.hbBot.addWidget(self.btn3)

 

addWidget() 함수로 위에서 만든 컨트롤을 레이아웃에 배치한다.

이때 addStretch()를 사용 할 수도 있음.

 

# 이벤트 추가 .clicked.connect()

self.btn1.clicked.connect(self.prt_line)

self.btn2.clicked.connect(self.del_line)

self.btn3.clicked.connect(self.prt_del)

 

.clicked.connect() 함수로 컨트롤에 이벤트를 연결한다.

이벤트 발생시 실행할 함수를 넣을 때에는 ( )를 넣지 않는다.

 

# 이벤트 함수 .text() .clear() self.함수()

def prt_line(self):

    print(self.ln.text())

 

def del_line(self):

    self.ln.clear()

 

def prt_del(self):

    self.prt_line()

    self.del_line()

 

이벤트가 실행된 함수를 만들어준다.

Form이라는 이름의 Class에서의 이벤트임으로 self로 매개변수를 받는다.

 

 

 


이런 글도 찾아보세요!

공유

facebooktwitterpinterestbandkakao story
퍼머링크

댓글 0

권한이 없습니다. 로그인

신고

"님의 댓글"

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

삭제

"님의 댓글"

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