레이아웃(Layout) 및 위젯(Widget)간의 간격설정 방법 : setSpacing, setContentsMargins, addSpacerItem
PyQt를 사용하여 GUI 애플리케이션을 개발할 때, 위젯 간의 간격과 레이아웃의 여백을 조정하는 것은 사용자 인터페이스의 가독성과 사용성을 높이는 데 중요한 요소입니다. 이 글에서는 setSpacing과 setContentsMargins 메서드를 사용하여 레이아웃과 위젯 간의 간격을 설정하는 방법을 정리했습니다. 여기에서 정리한 setSpacing을 사용하면 레이아웃 내의 위젯 간의 간격을 쉽게 조정할 수 있으며, setContentsMargins를 사용하면 레이아웃의 외부 여백을 설정할 수 있습니다. 그리고 addSpacerItem을 사용하여 레이아웃에 공간을 추가할 수 있습니다.
setSpacing 메서드
setSpacing 메서드는 레이아웃 내의 위젯들 사이의 간격을 조정하는 데 사용됩니다. 이 메서드를 사용하면 레이아웃에 포함된 모든 위젯 사이의 간격을 한 번에 설정할 수 있습니다. 예를 들어, QVBoxLayout이나 QHBoxLayout을 사용할 때 위젯들 간의 수직 또는 수평 간격을 쉽게 조정할 수 있습니다.
layout.setSpacing(spacing)
- spacing: 위젯 간의 간격을 나타내는 정수 값입니다. 이 값은 픽셀 단위로 측정됩니다. 예를 들어, spacing 값을 10으로 설정하면 레이아웃 내의 모든 위젯 사이의 간격이 10픽셀이 됩니다.
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.btn1 = QPushButton("Button 1")
self.btn2 = QPushButton("Button 2")
self.btn3 = QPushButton("Button 3")
layout = QVBoxLayout()
layout.addWidget(self.btn1)
layout.addWidget(self.btn2)
layout.addWidget(self.btn3)
layout.setSpacing(20) # 위젯 사이의 간격을 20픽셀로 설정
self.setLayout(layout)
self.setWindowTitle('QVBoxLayout setSpacing Example')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
setContentsMargins 메서드
setContentsMargins 메서드는 레이아웃의 외부 여백을 설정하는 데 사용됩니다. 이 메서드를 사용하여 레이아웃의 왼쪽, 위, 오른쪽, 아래 여백을 개별적으로 지정할 수 있습니다. 이를 통해 레이아웃 내의 위젯들이 가장자리와 적절한 간격을 유지할 수 있게 합니다.
layout.setContentsMargins(left, top, right, bottom)
- setContentsMargins(left, top, right, bottom)는 레이아웃의 외부 여백을 설정합니다.
- left: 레이아웃의 왼쪽 여백
- top: 레이아웃의 위쪽 여백
- right: 레이아웃의 오른쪽 여백
- bottom: 레이아웃의 아래쪽 여백
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.btn1 = QPushButton("Button 1")
self.btn2 = QPushButton("Button 2")
self.btn3 = QPushButton("Button 3")
layout = QVBoxLayout()
layout.addWidget(self.btn1)
layout.addWidget(self.btn2)
layout.addWidget(self.btn3)
# 레이아웃의 여백을 설정 (왼쪽, 위, 오른쪽, 아래)
layout.setContentsMargins(10, 20, 10, 20) # Left: 10px, Top: 20px, Right: 10px, Bottom: 20px
self.setLayout(layout)
self.setWindowTitle('QVBoxLayout setContentsMargins Example')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
addSpacerItem 메서드 (with QSpacerItem)
QSpacerItem과 addSpacerItem은 PyQt5에서 레이아웃 내의 위젯 사이에 공간을 추가하는 데 사용됩니다. QSpacerItem을 사용하여 고정된 크기 또는 확장 가능한 공간을 만들고, 이를 레이아웃에 추가할 수 있습니다.
QSpacerItem(width, height, hPolicy=QSizePolicy.Minimum, vPolicy=QSizePolicy.Minimum)
- width: 가로 크기 (픽셀 단위)
- height: 세로 크기 (픽셀 단위)
- hPolicy: 수평 크기 정책 (QSizePolicy 값)
- vPolicy: 수직 크기 정책 (QSizePolicy 값)
- 주요 QSizePolicy 값
- QSizePolicy.Minimum: 가능한 최소 크기
- QSizePolicy.Fixed: 고정된 크기
- QSizePolicy.Expanding: 가능한 한 많이 확장
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout, QSpacerItem, QSizePolicy
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.btn1 = QPushButton("Button 1")
self.btn2 = QPushButton("Button 2")
self.btn3 = QPushButton("Button 3")
layout = QVBoxLayout()
layout.addWidget(self.btn1)
# QSpacerItem을 생성하고 레이아웃에 추가
spacer = QSpacerItem(0, 20, QSizePolicy.Minimum, QSizePolicy.Fixed)
layout.addSpacerItem(spacer) # Add spacer between widgets
layout.addWidget(self.btn2)
spacer = QSpacerItem(0, 20, QSizePolicy.Minimum, QSizePolicy.Fixed)
layout.addSpacerItem(spacer) # Add another spacer between widgets
layout.addWidget(self.btn3)
self.setLayout(layout)
self.setWindowTitle('QVBoxLayout Spacer Example')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
1. setContentsMargins(0,0,0,0) + setSpacing(0)
2. layout.addSpacerItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
3. layout.addSpacerItem(QSpacerItem(40, 20, QSizePolicy.Minimum, QSizePolicy.Minimum))
4. layout.addSpacerItem(QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Minimum))
layout = QHBoxLayout()
layout.addSpacerItem(QSpacerItem(10, 20, QSizePolicy.Minimum, QSizePolicy.Minimum))
layout.addWidget(self.btnAlignViewAll)
layout.addWidget(self.btnAlignViewTable)
layout.addWidget(self.btnAlignViewPackage)
layout.addWidget(self.btnAlignViewTable2)
layout.addWidget(self.btnAlignViewPackage2)
layout.addSpacerItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
v_layout = QVBoxLayout()
v_layout.setContentsMargins(10,5,0,0)
v_layout.setSpacing(0)
v_layout.addLayout(layout)
v_layout.addWidget(self.spliter)
self.setLayout(v_layout)
self.setWindowFlags(Qt.FramelessWindowHint | Qt.Tool)
'코딩취미 > Python' 카테고리의 다른 글
QLineEdit의 글자 색상과 배경색/테두리 변경 방법 :setStyleSheet (0) | 2024.08.13 |
---|---|
QTableWidget 내부에 QLineEdit 와 QComboBox 추가해서 이벤트 처리하기 (0) | 2024.08.09 |
MVC (Model-View-Controller)와 MVVM (Model-View-ViewModel)과 데이터 바인딩(Data Binding) (0) | 2024.07.23 |
파이썬 MVC 패턴 프로젝트 구성 및 예시 (0) | 2024.07.22 |
에디터박스(QEdit)에서 최소값, 최대값 유효성 체크와 값 입력받기 (0) | 2024.07.19 |