Как отделить группы QRadioButton для разных таблиц

Рейтинг: 1Ответов: 1Опубликовано: 24.02.2023

Сам вопрос взял своё начало здесь: выделение строк по клику на строку и саму кнопку.

Образовалась в дальнейшем проблема при попытке увеличить количество таблиц (до 3 и более) - при нажатии по строке на любой таблице, видимо, из-за общедоступного self.row_selected и общей для всех таблиц self.button_group, объявленных в конструкторе и методе соответственно, выделение также меняется и в последней, куда вставлялись radioButton. (Стоит отметить, что при клике на саму кнопку в любой из таблиц всё работает верно, как планируется и при клике на строку).

Я пытался менять глобальные переменные, делать self.cell_row анонимной(лямбда-ф-ией) и передавать в неё флаги (из какой таблицы вызывается метод) - это всё не увенчалось успехом.

Как всё-таки обойти это и заставить работать клик по строке любой из таблиц так же, как клик по кнопке любой из таблиц?

Первые 2 скрина - клики по кнопкам таблицы (сохраняется выделение и отмеченные кнопки). Последний скрин - клики по строкам всех таблиц, кроме последней (меняются выделения, и отмечается rb только в последней таблице)

Клик по кнопке 1-ой таблицы Клик по кнопке 2-ой таблицы Клик по строке 1-ой таблицы

main.py

import sys

from PyQt5 import QtWidgets, QtCore
from ui import untitled


class MainWindow(QtWidgets.QMainWindow, untitled.Ui_Form):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.tableWidget.cellClicked.connect(self.cell_row)
        self.tableWidget_2.cellClicked.connect(self.cell_row)
        self.tableWidget_3.cellClicked.connect(self.cell_row)

        self.row_selected = None
        '''self.button_group1 = None
        self.row_selected2 = None
        self.button_group2 = None'''
        self.insert_rb(self.tableWidget)
        self.insert_rb(self.tableWidget_2)
        self.insert_rb(self.tableWidget_3)

    def create_radioButton(self):
        widget = QtWidgets.QWidget()
        rb = QtWidgets.QRadioButton()
        pLayout = QtWidgets.QHBoxLayout(widget)
        pLayout.addWidget(rb)
        pLayout.setAlignment(QtCore.Qt.AlignCenter)
        pLayout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(pLayout)
        return widget, rb

    def cell_row(self, row, column):
        print(f'\n row={row}; column={column}')
        self.row_selected = row
        rb = self.button_group.button(row)
        rb.click()

    def insert_rb(self, table):
        row_count = table.rowCount()

        self.button_group = QtWidgets.QButtonGroup(self)
        self.button_group.setExclusive(True)

        for i in range(row_count):
            widget, radio = self.create_radioButton()
            radio.toggled.connect(lambda ch, row=i: self.currentPos(ch, row, table))
            table.setCellWidget(i, 0, widget)

            self.button_group.addButton(radio)
            self.button_group.setId(radio, i)

    def currentPos(self, ch, row, table):
        # print(f' row = {row} -- {ch}')
        if ch:
            self.row_selected = row
            table.selectRow(row)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

untitled.py (конвертировал из .ui в .py)

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(844, 506)
        self.tableWidget = QtWidgets.QTableWidget(Form)
        self.tableWidget.setGeometry(QtCore.QRect(240, 10, 321, 151))
        self.tableWidget.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget.setShowGrid(True)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 2, item)
        self.tableWidget_2 = QtWidgets.QTableWidget(Form)
        self.tableWidget_2.setGeometry(QtCore.QRect(240, 180, 321, 151))
        self.tableWidget_2.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget_2.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget_2.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget_2.setShowGrid(True)
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tableWidget_2.setColumnCount(3)
        self.tableWidget_2.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 2, item)
        self.tableWidget_3 = QtWidgets.QTableWidget(Form)
        self.tableWidget_3.setGeometry(QtCore.QRect(240, 350, 321, 151))
        self.tableWidget_3.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget_3.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget_3.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget_3.setShowGrid(True)
        self.tableWidget_3.setObjectName("tableWidget_3")
        self.tableWidget_3.setColumnCount(3)
        self.tableWidget_3.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 2, item)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.tableWidget.setSortingEnabled(True)
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Form", "0"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget.isSortingEnabled()
        self.tableWidget.setSortingEnabled(False)
        item = self.tableWidget.item(0, 1)
        item.setText(_translate("Form", "sssss"))
        item = self.tableWidget.item(0, 2)
        item.setText(_translate("Form", "xxxxxxx"))
        item = self.tableWidget.item(1, 1)
        item.setText(_translate("Form", "ttttt"))
        item = self.tableWidget.item(1, 2)
        item.setText(_translate("Form", "jjjjjj"))
        self.tableWidget.setSortingEnabled(__sortingEnabled)
        self.tableWidget_2.setSortingEnabled(True)
        item = self.tableWidget_2.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_2.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget_2.horizontalHeaderItem(0)
        item.setText(_translate("Form", "New Column"))
        item = self.tableWidget_2.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_2.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget_2.isSortingEnabled()
        self.tableWidget_2.setSortingEnabled(False)
        item = self.tableWidget_2.item(0, 1)
        item.setText(_translate("Form", "1111"))
        item = self.tableWidget_2.item(0, 2)
        item.setText(_translate("Form", "2222"))
        item = self.tableWidget_2.item(1, 1)
        item.setText(_translate("Form", "33333"))
        item = self.tableWidget_2.item(1, 2)
        item.setText(_translate("Form", "44444"))
        self.tableWidget_2.setSortingEnabled(__sortingEnabled)
        self.tableWidget_3.setSortingEnabled(True)
        item = self.tableWidget_3.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_3.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget_3.horizontalHeaderItem(0)
        item.setText(_translate("Form", "0"))
        item = self.tableWidget_3.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_3.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget_3.isSortingEnabled()
        self.tableWidget_3.setSortingEnabled(False)
        item = self.tableWidget_3.item(0, 1)
        item.setText(_translate("Form", "text1"))
        item = self.tableWidget_3.item(0, 2)
        item.setText(_translate("Form", "num1"))
        item = self.tableWidget_3.item(1, 1)
        item.setText(_translate("Form", "text2"))
        item = self.tableWidget_3.item(1, 2)
        item.setText(_translate("Form", "num2"))
        self.tableWidget_3.setSortingEnabled(__sortingEnabled)


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()
    sys.exit(app.exec_())

Ответы

▲ 1Принят

Я отметил для вас строки, в которые надо внести изменения:

import sys
from PyQt5 import QtCore, QtGui, QtWidgets

#from ui import untitled
class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(844, 506)
        self.tableWidget = QtWidgets.QTableWidget(Form)
        self.tableWidget.setGeometry(QtCore.QRect(240, 10, 321, 151))
        self.tableWidget.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget.setShowGrid(True)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setItem(1, 2, item)
        self.tableWidget_2 = QtWidgets.QTableWidget(Form)
        self.tableWidget_2.setGeometry(QtCore.QRect(240, 180, 321, 151))
        self.tableWidget_2.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget_2.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget_2.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget_2.setShowGrid(True)
        self.tableWidget_2.setObjectName("tableWidget_2")
        self.tableWidget_2.setColumnCount(3)
        self.tableWidget_2.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_2.setItem(1, 2, item)
        self.tableWidget_3 = QtWidgets.QTableWidget(Form)
        self.tableWidget_3.setGeometry(QtCore.QRect(240, 350, 321, 151))
        self.tableWidget_3.setStyleSheet("QTableWidget::item:hover {\n"
"    color: white;\n"
"    background-color: red;\n"
"}      \n"
"\n"
"QTableWidget::item:selected\n"
"{\n"
"     color: white;\n"
"    background-color: green;\n"
"    \n"
"}\n"
"")
        self.tableWidget_3.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
        self.tableWidget_3.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
        self.tableWidget_3.setShowGrid(True)
        self.tableWidget_3.setObjectName("tableWidget_3")
        self.tableWidget_3.setColumnCount(3)
        self.tableWidget_3.setRowCount(2)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget_3.setItem(1, 2, item)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.tableWidget.setSortingEnabled(True)
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("Form", "0"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget.isSortingEnabled()
        self.tableWidget.setSortingEnabled(False)
        item = self.tableWidget.item(0, 1)
        item.setText(_translate("Form", "sssss"))
        item = self.tableWidget.item(0, 2)
        item.setText(_translate("Form", "xxxxxxx"))
        item = self.tableWidget.item(1, 1)
        item.setText(_translate("Form", "ttttt"))
        item = self.tableWidget.item(1, 2)
        item.setText(_translate("Form", "jjjjjj"))
        self.tableWidget.setSortingEnabled(__sortingEnabled)
        self.tableWidget_2.setSortingEnabled(True)
        item = self.tableWidget_2.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_2.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget_2.horizontalHeaderItem(0)
        item.setText(_translate("Form", "New Column"))
        item = self.tableWidget_2.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_2.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget_2.isSortingEnabled()
        self.tableWidget_2.setSortingEnabled(False)
        item = self.tableWidget_2.item(0, 1)
        item.setText(_translate("Form", "1111"))
        item = self.tableWidget_2.item(0, 2)
        item.setText(_translate("Form", "2222"))
        item = self.tableWidget_2.item(1, 1)
        item.setText(_translate("Form", "33333"))
        item = self.tableWidget_2.item(1, 2)
        item.setText(_translate("Form", "44444"))
        self.tableWidget_2.setSortingEnabled(__sortingEnabled)
        self.tableWidget_3.setSortingEnabled(True)
        item = self.tableWidget_3.verticalHeaderItem(0)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_3.verticalHeaderItem(1)
        item.setText(_translate("Form", "2"))
        item = self.tableWidget_3.horizontalHeaderItem(0)
        item.setText(_translate("Form", "0"))
        item = self.tableWidget_3.horizontalHeaderItem(1)
        item.setText(_translate("Form", "1"))
        item = self.tableWidget_3.horizontalHeaderItem(2)
        item.setText(_translate("Form", "2"))
        __sortingEnabled = self.tableWidget_3.isSortingEnabled()
        self.tableWidget_3.setSortingEnabled(False)
        item = self.tableWidget_3.item(0, 1)
        item.setText(_translate("Form", "text1"))
        item = self.tableWidget_3.item(0, 2)
        item.setText(_translate("Form", "num1"))
        item = self.tableWidget_3.item(1, 1)
        item.setText(_translate("Form", "text2"))
        item = self.tableWidget_3.item(1, 2)
        item.setText(_translate("Form", "num2"))
        self.tableWidget_3.setSortingEnabled(__sortingEnabled)
        

class MainWindow(QtWidgets.QMainWindow, Ui_Form):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv         
        self.dict_button_group = {}                                   # !!! +++
                                                         
        self.tableWidget.cellClicked.connect(
# --------> vvvvvv vvv  vvvvvv  vvvvvvvvvvvvvvvvvvvvvv <---- + table=self.tableWidget
            lambda row, column, table=self.tableWidget:               # !!! +++
            self.cell_row(row, column, table))                        # !!! +++
# ----------------------> ^^^  ^^^^^^  ^^^^^^   <--------------------- + table
        self.tableWidget_2.cellClicked.connect(
            lambda row, column, table=self.tableWidget_2: 
            self.cell_row(row, column, table))
        self.tableWidget_3.cellClicked.connect(
            lambda row, column, table=self.tableWidget_3: 
            self.cell_row(row, column, table))
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

#-        self.row_selected = None
        self.insert_rb(self.tableWidget)
        self.insert_rb(self.tableWidget_2)
        self.insert_rb(self.tableWidget_3)
        
    def insert_rb(self, table):
        #print(f'\n def insert_rb: table={table.objectName()}; ')
        row_count = table.rowCount()

#-        self.button_group = QtWidgets.QButtonGroup(self)
#-        self.button_group.setExclusive(True)
        button_group = QtWidgets.QButtonGroup(self)                     # +++
        button_group.setExclusive(True)                                 # +++
        
        for i in range(row_count):
            widget, radio = self.create_radioButton()
            radio.toggled.connect(
                lambda ch, row=i: self.currentPos(ch, row, table))
            table.setCellWidget(i, 0, widget)

#-            self.button_group.addButton(radio)
#-            self.button_group.setId(radio, i)
            button_group.addButton(radio)                             # +++ 
            button_group.setId(radio, i)                              # +++ 
            
        self.dict_button_group[table.objectName()] = button_group     # !!! +++ 
# ----> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   ^^^^^^^^^^^^   <----------
        
    def create_radioButton(self):
        widget = QtWidgets.QWidget()
        rb = QtWidgets.QRadioButton()
        pLayout = QtWidgets.QHBoxLayout(widget)
        pLayout.addWidget(rb)
        pLayout.setAlignment(QtCore.Qt.AlignCenter)
        pLayout.setContentsMargins(0, 0, 0, 0)
        widget.setLayout(pLayout)
        return widget, rb

# ------------------>  vvv  vvvvvv  vvvvv <---------------------------
    def cell_row(self, row, column, table):                           # + table
        #print(f'\n def cell_row: row={row}; column={column}; table={table.objectName()}')
#-        self.row_selected = row
        
#-        rb = self.button_group.button(row)
        button_group = self.dict_button_group[table.objectName()]     # !!! +++

#-        rb = self.button_group.button(row)
        rb = button_group.button(row)                                 # +++
        
        rb.click()

    def currentPos(self, ch, row, table):
        #print(f'def currentPos: row = {row}; table = {table.objectName()}; ch = {ch}')
        if ch:
            #print(f'def currentPos: row = {row}; table = {table.objectName()}\n') #
#-            self.row_selected = row
            table.selectRow(row)


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    window = MainWindow()
    window.show()
    app.exec_()

введите сюда описание изображения

Если что-то не понятно - спросите.