Как функцией воздействовать на каждый элемент массива?
У меня есть повторяющиеся кнопки и что бы их различать я каждую из них засунул в массив но проблема в том что я не понимаю как через команду conect() заставить каждую из них работать отдельно. Я пробовал так
tes_but = [0]
def off_pressed_radio(num):
check_1 = tes_but[num].isChecked()
if check_1 == True:
print('check')
tes_but[num].setAutoExclusive(True) #Unchecked/Checked
tes_but[num].setChecked(False) #Unchecked/Checked
tes_but[num].setAutoExclusive(False) #Unchecked/Checked
for x in range(3):
tes_but_1 = QtWidgets.QRadioButton(test1_menu_block, checkable=True, checked=False)
tes_but_1.setObjectName("test1_butt_menu_{}".format(x))
tes_but.append(tes_but_1)
verticalLayout.addWidget(tes_but[x+1])
tes_but[x+1].pressed.connect(off_pressed_radio(x+1))
Но тогда появляется ошибка
TypeError: argument 1 has unexpected type 'NoneType'
Также я пробовал так
tes_but = [0]
for x in range(3):
tes_but_1 = QtWidgets.QRadioButton(test1_menu_block, checkable=True, checked=False)
tes_but_1.setObjectName("test1_butt_menu_{}".format(x))
tes_but.append(tes_but_1)
verticalLayout.addWidget(tes_but[x+1])
def off_pressed_radio():
check_1 = tes_but[x+1].isChecked()
if check_1 == True:
print('check')
tes_but[x+1].setAutoExclusive(True) #Unchecked/Checked
tes_but[x+1].setChecked(False) #Unchecked/Checked
tes_but[x+1].setAutoExclusive(False) #Unchecked/Checked
else:
print('uncheked')
tes_but[x+1].pressed.connect(off_pressed_radio)
Но функция работает правильно только на последний элемент массива а не на каждый в отдельности
Как правильно это сделать?
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Попробуйте заменить строку:
tes_but[x+1].pressed.connect(off_pressed_radio(x+1))
на:
tes_but[x+1].pressed.connect(lambda num=x+1: off_pressed_radio(num))
В connect нужно передавать ссылку на функцию, а выражение off_pressed_radio(x+1) вернет результат выполнения функции. Поэтому, правильно будет сделать лямбду-функцию и в ней вызывать ту функцию