Я хочу многоцветный виджет выбора. У меня есть кнопка «+» и изначально пустой vbox. Когда нажимается +, он добавляет QHBoxLayout в vbox, содержащий кнопку «-» и 3 спинбокса. Когда нажата кнопка «-», я хочу, чтобы этот ряд исчез, и все вернулось к тому, что было до добавления этого ряда. Код, который у меня сейчас есть:
vbox = self.ui.color_layout #from QtDesigner
hbox = QtGui.QHBoxLayout()
remove = QtGui.QPushButton("-", parent=self)
remove.clicked.connect(lambda: vbox.removeItem(hbox))
rspin = QtGui.QSpinBox(parent=self)
gspin = QtGui.QSpinBox(parent=self)
bspin = QtGui.QSpinBox(parent=self)
hbox.addWidget(remove)
hbox.addWidget(QtGui.QLabel("R:", parent=self))
hbox.addWidget(rspin)
hbox.addWidget(QtGui.QLabel("G:", parent=self))
hbox.addWidget(gspin)
hbox.addWidget(QtGui.QLabel("B:", parent=self))
hbox.addWidget(bspin)
vbox.addLayout(hbox)
Добавление виджетов работает нормально. Тем не менее, удаление их приводит к действительно запутанной вещи, где строка на самом деле не удаляется, но интервал все перепутан.
Что я делаю не так?
РЕДАКТИРОВАТЬ: Документы говорят, для removeWidget
:
После этого вызова вызывающая сторона должна предоставить виджету разумную геометрию или вернуть виджет в макет.
Как мне это сделать? (Я из истории GTK ...)
РЕДАКТИРОВАТЬ 2: Я даже отслеживал строки и вызывал функцию takeAt
, чтобы удалить ее, но она все еще запуталась. Что дает? Похоже, что макет удален, но ни один из виджетов не ...
РЕДАКТИРОВАТЬ 3: это также не работает, просто запутывает вещи аналогичным образом:
vbox = self.ui.color_layout
hbox = QtGui.QHBoxLayout()
row_widget = QtGui.QWidget(parent=self) #dummy widget to hold this stuff
remove = QtGui.QPushButton("-", parent=self)
def remove_func():
vbox.removeWidget(row_widget)
remove.clicked.connect(remove_func)
rspin = QtGui.QSpinBox(parent=self)
gspin = QtGui.QSpinBox(parent=self)
bspin = QtGui.QSpinBox(parent=self)
hbox.addWidget(remove)
hbox.addWidget(QtGui.QLabel("R:", parent=self))
hbox.addWidget(rspin)
hbox.addWidget(QtGui.QLabel("G:", parent=self))
hbox.addWidget(gspin)
hbox.addWidget(QtGui.QLabel("B:", parent=self))
hbox.addWidget(bspin)
row_widget.setLayout(hbox)
vbox.addWidget(row_widget)