레이아웃에 ui를 추가하기 위해 사용하는 메소드
addWidget() / addLayout() / addSpacing() / addStretch() / addSpacerItem()
레이아웃에 추가된 ui를 가져오는 메소드
widget() / layout() / spacing() / stretch() / spacerItem()
이들 중 widget() / layout() 메소드는 itemAt(idx) 로 레이아웃으로부터 layoutitem을 먼저 추출한 후
추출된 아이템에서 호출해야한다. (idx는 add된 순서이다.)
takeAt(idx) 메소드는 레이아웃에 추가된 ui를 리턴한 후 삭제한다.
buttonH = QPushButton("1번 버튼")
button2 = QPushButton("2번 버튼")
button3 = QPushButton("3번 버튼")
hbox = QHBoxLayout()
hbox.addWidget(buttonH)
vbox = QVBoxLayout()
vbox.addLayout(hbox)
vbox.addWidget(button2)
vbox.addSpacing(5)
vbox.addSpacerItem(QSpacerItem(20, 48, QSizePolicy.Minimum, QSizePolicy.Expanding))
vbox.addStretch(5)
vbox.addWidget(button3)
self.setLayout(vbox)
testlog.debug("---------------------------------------------------------")
new_vbox = self.layout() # self의 layout
testlog.debug("vbox.count(): %d" % vbox.count())
new_hbox = new_vbox.layout() # vbox 자체의 layout이 추출된다.
testlog.debug("type(hbox): %s" % (type(hbox)))
item = {}
for idx in range(new_vbox.count()):
item[idx] = new_vbox.itemAt(idx)
testlog.debug("type(item[%d]): %s" % (idx, type(item[idx])))
new_hbox = item[0].layout()
new_button1 = item[1].widget()
spacer1 = item[2].widget()
spacer2 = item[3].widget()
spacer3 = item[4].widget()
new_button2 = item[1].widget()
testlog.info("new_button1.text(): %s, new_button2.text(): %s" % (new_button1.text(), new_button2.text()))
출력 내용은...
[2020-05-06 15:55:54,596][DEBUG|TestMain.py:352] ---------------------------------------------------------
[2020-05-06 15:55:54,597][DEBUG|TestMain.py:355] vbox.count(): 6
[2020-05-06 15:55:54,597][DEBUG|TestMain.py:358] type(hbox): <class 'PyQt5.QtWidgets.QHBoxLayout'>
[2020-05-06 15:55:54,597][DEBUG|TestMain.py:364] type(item[0]): <class 'PyQt5.QtWidgets.QHBoxLayout'>
[2020-05-06 15:55:54,597][DEBUG|TestMain.py:364] type(item[1]): <class 'PyQt5.QtWidgets.QWidgetItem'>
[2020-05-06 15:55:54,598][DEBUG|TestMain.py:364] type(item[2]): <class 'PyQt5.QtWidgets.QSpacerItem'>
[2020-05-06 15:55:54,598][DEBUG|TestMain.py:364] type(item[3]): <class 'PyQt5.QtWidgets.QSpacerItem'>
[2020-05-06 15:55:54,599][DEBUG|TestMain.py:364] type(item[4]): <class 'PyQt5.QtWidgets.QSpacerItem'>
[2020-05-06 15:55:54,609][DEBUG|TestMain.py:364] type(item[5]): <class 'PyQt5.QtWidgets.QWidgetItem'>
[2020-05-06 15:55:54,610][INFO|TestMain.py:373] new_button1.text(): 2번 버튼, new_button2.text(): 2번 버튼
'프로그래밍 > 라이브러리' 카테고리의 다른 글
로깅 라이브러리 (0) | 2021.12.06 |
---|---|
[PyQt] QMainWindow에서 QMenu 꺼내기 (0) | 2020.05.08 |
[PyQt] 시그널 블럭 (0) | 2020.05.04 |
[PyQt] addLayout() / setLayout() 쓰임 (0) | 2020.04.16 |
[PyQt] datime형과 QDate 간의 변환 (0) | 2020.04.15 |