정보&강의 BoxLayout으로 Layout 잡는 방법
- 운영자
- 554
- 0
첨부 2
- MDAxNTY2MzgwNzE4OTky.cjxQDGXDxaAW2ISmH3jOiT6x8UKsYEwcVYGJ16ccrf0g.u7dWzp-6vKCSkJ_wlNY9k40v4GI918PXOUZY_QCpCQMg.PNG (File Size: 337.6KB/Download: 0)
- MDAxNTY2MzgwNzQ1MDc1.LTGLbIzKV4reVU4fwc_WG-SRO4siFSKy8t17SmEqN-kg.zwZoXXQDmyV6EI8rvjnoJdFIkwtjXgq76UWy2nqIfSQg.PNG (File Size: 3.8KB/Download: 0)
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로 매개변수를 받는다.