Как функцией воздействовать на каждый элемент массива?

У меня есть повторяющиеся кнопки и что бы их различать я каждую из них засунул в массив но проблема в том что я не понимаю как через команду 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) вернет результат выполнения функции. Поэтому, правильно будет сделать лямбду-функцию и в ней вызывать ту функцию

→ Ссылка