pyqt의 레이아웃에 문제가 있습니다. 레이아웃에서 항목을 닫은 후에도 여전히 layout.count()가 이전 항목 수를 반환합니다. 그래서 .close() 정말 레이아웃에서 항목을 제거하지 생각하십시오. 다음은 완전한 작동 예제입니다.pyqt의 레이아웃에서 항목을 제거하는 가장 좋은 방법은 무엇입니까
import sys
from PyQt4 import QtGui,QtCore
class LayoutTest(QtGui.QWidget):
def __init__(self):
super(LayoutTest, self).__init__()
self.vvbox = QtGui.QVBoxLayout()
self.dvbox = QtGui.QVBoxLayout()
vbox = QtGui.QVBoxLayout()
vbox.addLayout(self.vvbox)
vbox.addLayout(self.dvbox)
self.setLayout(vbox)
self.add_button = QtGui.QPushButton("Add Items")
self.edit_button = QtGui.QPushButton("Remove Items")
self.chk_button = QtGui.QPushButton("Check Items")
self.vvbox.addWidget(self.add_button)
self.vvbox.addWidget(self.edit_button)
self.vvbox.addWidget(self.chk_button)
self.connect(self.add_button, QtCore.SIGNAL("clicked()"), self.addButtons)
self.connect(self.edit_button, QtCore.SIGNAL("clicked()"), self.removeButtons)
self.connect(self.chk_button, QtCore.SIGNAL("clicked()"), self.checkItems)
self.setGeometry(300, 200, 400, 300)
def keyPressEvent(self, event):
if event.key() == QtCore.Qt.Key_Escape:
self.close()
def addButtons(self):
for i in range(0, 5):
self.r_button = QtGui.QPushButton("Button %s " % i)
self.dvbox.addWidget(self.r_button)
def removeButtons(self):
for cnt in range(self.dvbox.count()):
self.dvbox.itemAt(cnt).widget().close()
def checkItems(self):
QtGui.QMessageBox.information(self, 'Count',"You have %s Items in Layout" % self.dvbox.count(), QtGui.QMessageBox.Ok)
def run():
app = QtGui.QApplication(sys.argv)
ex = LayoutTest()
ex.show()
sys.exit(app.exec_())
if __name__ == "__main__":
run()
버튼을 두 번 클릭하면 버튼이 삭제됩니다. 그런 다음 항목을 확인하십시오. 닫은 후에도 레이아웃에 n 개의 항목이 생깁니다.
그래서 닫는 것 이외의 레이아웃에서 위젯을 제거하는 가장 좋은 방법은 무엇입니까?
나는 해결책을 찾았지만 얼마나 효율적인지 알지 못했습니다. 범위 (계수기)에 대한 CNT 카운터 = self.dvbox.count() : 여기 내 용액 데프 removeButtons (자기)이다 self.dvbox.itemAt = w (self.dvbox.count() - 1) .widget() self.dvbox.removeWidget (w) w.close() – Achayan