본문 바로가기
프로그래밍/라이브러리

[PyQt] ui 추출

by 써드아이 2020. 5. 6.

레이아웃에 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