애드블럭을 제거하거나 잠시 꺼주세요.


※ 자료설명 ※

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로 매개변수를 받는다.

 

 

 



※ 자료현황 ※
등록일 : 2020-06-05 22:58:27 / 문서노출 : 545 / 다운로드 0


※ 파일 다운로드 ※
파일 이름 : MDAxNTY2MzgwNzE4OTky.cjxQDGXDxaAW2ISmH3jOiT6x8UKsYEwcVYGJ16ccrf0g.u7dWzp-6vKCSkJ_wlNY9k40v4GI918PXOUZY_QCpCQMg.PNG (337.6KB)