Как нормализовать работу динамически созданных QComboBox?
Как нормализовать работу цикла?
Нужно чтобы после выбора элемента в конкретном QComboBox
, он выводился в консоль.
После запуска, если нажать на кнопку более двух раз и выбрать элемент в любом QComboBox
, кроме нижнего, то в консоль выведет сначала нужный элемент, затем почему-то выводит остальные элементы, вплоть до нижнего.
Помогите с вариантами решения этой проблемы.
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QComboBox, QVBoxLayout
class Main_widget(QWidget):
def __init__(self):
super().__init__()
self.ui()
def ui(self):
self.add_btns = []
self.act_btn = QPushButton()
self.act_btn.clicked.connect(self.add_combo)
self.l = QVBoxLaypout()
self.l.addWidget(self.act_btn)
self.setLayout(self.l)
self.show()
def add_combo(self):
self.act_b_ = QComboBox()
self.act_b_.addItem('-')
self.add_btns.append(self.act_b_)
for element in self.add_btns:
element.activated.connect(lambda: print(element))
self.l.addWidget(self.act_b_)
if __name__ == '__main__':
app = QApplication([])
win = Main_widget()
app.exec_()
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Sorry, я плохо понял то, что вы хотите делать далее и добавил немного смысла в ваш код.
Попробуйте и спросите если что-то будет не понятно.
from random import sample
from PyQt5.QtWidgets import QApplication, QWidget, \
QPushButton, QComboBox, QVBoxLayout
class Main_widget(QWidget):
def __init__(self):
super().__init__()
self.my_num = 0
self.list_item = [
'Item1', 'Item2', 'Item3', 'Item4', 'Item5',
'Item6', 'Item7', 'Item8', 'Item9', 'Item10',
]
self.act_btn = QPushButton('Добавить ComboBox')
self.act_btn.clicked.connect(self.add_combo)
self.l = QVBoxLayout(self)
self.l.addWidget(self.act_btn)
def add_combo(self):
self.my_num += 1
_list_item = sample(self.list_item, 5)
obj_name = f'combo_{self.my_num}'
# ? зачем вам так много ComboBox ?
act_b_ = QComboBox(objectName=obj_name)
act_b_.addItems(_list_item)
act_b_.activated.connect(
lambda index, combo=act_b_:
print(f'objectName={obj_name}; index={index} {combo.itemText(index)};'))
self.l.addWidget(act_b_)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
win = Main_widget()
win.show()
sys.exit(app.exec())