작성
·
100
답변 2
0
안녕하세요. monkey-k 777님,
QGridLayout에서 위젯들이 같은 너비를 가지면서 윈도우 크기 변경에 따라 크기가 변하지 않도록 설정하려면, QWidget의 setSizePolicy() 메서드를 활용할 수 있습니다. QSizePolicy를 사용하여 위젯의 크기 조정 방식(확장/축소)을 제어할 수 있습니다. 또한, QGridLayout 내에서 가장 넓은 위젯에 맞춰 다른 위젯들의 너비를 맞추려면 QGridLayout의 setColumnStretch() 기능을 사용할 수 있습니다.
from PySide6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QSizePolicy
app = QApplication([])
window = QWidget()
layout = QGridLayout(window)
# 위젯 생성
button1 = QPushButton("Button 1")
button2 = QPushButton("Button 2")
button3 = QPushButton("Button 3")
button4 = QPushButton("Button 4")
# 위젯의 사이즈 정책을 'Fixed'로 설정하여 크기가 변하지 않도록 설정
button1.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button2.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button3.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
button4.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
# QGridLayout에 위젯 추가
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.addWidget(button3, 1, 0)
layout.addWidget(button4, 1, 1)
# 두 번째 열의 열 크기 비율을 1로 설정
layout.setColumnStretch(0, 1)
layout.setColumnStretch(1, 1)
window.show()
app.exec()
여기서 QSizePolicy.Fixed는 위젯의 크기를 고정시켜줍니다. 그리고 setColumnStretch()를 사용해 두 열의 크기를 동일하게 맞출 수 있습니다. 이 방법을 적용하면, 윈도우 크기에 상관없이 위젯들의 너비가 일정하게 유지됩니다. 필요에 따라 위젯들의 크기나 레이아웃을 더 조정할 수 있습니다.
혹시 더 궁금한게 있으면 언제든 질문해주세요.
감사합니다. 김대진드림.
QGridLayout에서 모든 버튼이 같은 너비를 유지하면서도, 텍스트가 긴 버튼이 있을 때 나머지 버튼들이 동일한 너비를 가지도록 설정하는 방법
은 아래와 같은 방식으로 맟출수 있을것 같습니다.
setColumnStretch를 사용해 각 열의 크기 비율을 동일하게 맞추는 방식.
QSizePolicy.Expanding을 사용해 위젯들이 확장되도록 하되, 일정 크기 이상으로 커지지 않게 제한.
QWidget.setMinimumWidth()를 설정하여 버튼들이 텍스트에 맞춰 최소 너비를 가질 수 있도록 합니다.
아래는 이를 구현한 예시 코드입니다:
from PySide6.QtWidgets import QApplication, QWidget, QGridLayout, QPushButton, QSizePolicy
app = QApplication([])
window = QWidget()
layout = QGridLayout(window)
# 버튼 생성
button1 = QPushButton("Button 11111111") # 긴 텍스트를 가진 버튼
button2 = QPushButton("Button 2")
button3 = QPushButton("Button 3")
button4 = QPushButton("Button 4")
# 버튼들에 사이즈 정책 설정 (너비 확장, 세로 크기 고정)
button1.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
button2.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
button3.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
button4.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
# 각 버튼의 최소 너비를 동일하게 설정하여 길어지는 텍스트에 맞춰 확장되도록 함
button1.setMinimumWidth(200) # 최소 너비를 설정
button2.setMinimumWidth(200)
button3.setMinimumWidth(200)
button4.setMinimumWidth(200)
# QGridLayout에 위젯 추가
layout.addWidget(button1, 0, 0)
layout.addWidget(button2, 0, 1)
layout.addWidget(button3, 1, 0)
layout.addWidget(button4, 1, 1)
# 열 크기 비율을 1로 설정하여 모든 버튼이 동일한 너비를 가짐
layout.setColumnStretch(0, 1)
layout.setColumnStretch(1, 1)
window.show()
app.exec()
각 버튼에 QSizePolicy.Expanding을 설정하여 버튼들이 가능한 한 넓게 확장되도록 합니다.
setMinimumWidth(200)을 사용하여 버튼들의 최소 너비를 설정하므로, 텍스트가 길어질 때 다른 버튼들도 동일한 너비를 유지합니다.
setColumnStretch(0, 1)와 setColumnStretch(1, 1)을 통해 두 열의 너비를 동일하게 분배합니다.
윈도우 크기가 커지면, 버튼들이 확장되며 빈 공간이 남을 수 있도록 합니다.
이 방식으로 버튼의 텍스트 길이에 관계없이, 버튼들이 같은 너비를 가지며 윈도우 크기가 늘어날 때 빈 공간이 나타나는 레이아웃을 구현할 수 있습니다.
혹시 더 궁금한게 있으면 언제든 질문해 주세요.
감사합니다. 김대진 드림.
0
안녕하세요, 인프런 AI 인턴입니다.
GridLayout에서 각 열이 가장 넓은 요소에 맞춰 같은 너비를 가지게 하면서, 창 크기에 따라 커지거나 작아지지 않도록 하는 것은 문제가 될 수 있습니다. Qt의 QGridLayout은 기본적으로 각 셀의 크기를 자동으로 조절하여 창의 크기에 맞추는 특성이 있기 때문입니다. 그러나 고정된 너비를 설정하거나, 특정 조건을 만족하도록 레이아웃을 구성하는 방법은 몇 가지가 있습니다.
setFixedWidth()
메서드를 사용하여 너비를 고정할 수 있습니다. 이는 위젯이 커지거나 작아지지 않도록 설정하는 가장 간단한 방법입니다. widget.setFixedWidth(max_width)
QSizePolicy
를 통해 확장 또는 수축하지 않도록 설정할 수 있습니다. 특히 setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
를 통해 위젯의 크기를 고정할 수 있습니다. widget.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Expanding)
QGridLayout
의 각 행과 열에 대해 setColumnStretch()
메서드를 사용하여 위젯들이 특정 비율에 따라 크기를 조정하도록 설정할 수 있습니다.위의 방법들은 당신이 원하는 고정된 UI 레이아웃을 구현할 수 있는 다양한 방법입니다. 각 방법들은 서로 다른 사용 사례에 맞게 조정이 가능하니, 시도해보시고 가장 적합한 방법을 선택하시면 됩니다.
관련된 질문과 논의는 아래의 게시물에서 확인하실 수 있습니다:
- 위젯프로그램 위에 챠트 띄우기
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
안녕하세요 김대진 강사님, 소중한 답변 감사합니다.
알려주신 소스 코드를 실행시켜보았으나, 제가 궁금한 것은 Button 1의 텍스트만 예를 들어 Button 11111111과 같이 길어질 때, 나머지 버튼 2, 3, 4 위젯 또한 같은 너비를 가질 수 있는가, 또한 윈도우 크기를 늘렸을 때, Button 11111111과 Button 2의 너비보다 윈도우 화면이 크다면, 빈 공간으로 나타낼 수 있는가였습니다. 혹시 한 번만 더 같이 고민해주실 수 있을까요..?