Работа с ячейками PyQt5 Python

У меня программа получает данные с оборудования для проверки радиостанций и записывает их в таблицу, несколько ячеек в строке остаются пустыми, т.к. эти данные не получить и вводить их нужно самому вручную.

Возникло два вопроса:

  1. как можно поставить условие в ячейку, например если я ввожу значение меньше 50, оно заменяется на «N/R»?

  2. Как выяснить содержит ли ячейка какие нибудь данные? После проверки радиостанции заполняется строка и если ячейка пустая, то нужно вывести дефолтное значение.

Помогите пожалуйста разобраться.

Можете показать на примере?

def get_check_result(self, check_result):

    col = 0

    for param in check_result:

        cell_info = QtTableWidgetItem(str(param)
        self.result_table.setItem(self.row, col, cell_info)
        col += 1
   
    self.row += 1

Ответы (1 шт):

Автор решения: Alexander Chernin

Если вы используете QTableWidget, то для тонкой настройки поведения ячеек можно наследовать QTableWidgetItem и сделать с наследниками все, что вы хотите.

Например:

  1. как можно поставить условие в ячейку, например если я ввожу значение меньше 50, оно заменяется на «N/R»?
class MyWidgetItem(QTableWidgetItem):
    def __init__(self, value):
        super.__init__(self)
        self.setValue(value)

    def setValue(self, value):
        # если value число, то приведем его к int и проверим значение
        if isnumeric(value) and int(value) < 50:
            super.setText('N/R')
        else:
            super.setText(value)

    def value(self, defaultValue=''):
        # Если text не пустой, то возвращаем его значение, иначе вернем дефолтное
        return self.text() if self.text() else defaultValue

Теперь можно плодить соответствующие объекты и наполнять ими какой-нибудь QTаbleWidget

self.result_table.setItem(row, col, MyWidgetItem(param))
  1. Как выяснить содержит ли ячейка какие нибудь данные? После проверки радиостанции заполняется строка и если ячейка пустая, то нужно вывести дефолтное значение.
# метод какого-то класса
def getTableCellValue(self):
    item = self.result_table.getItem(row, col)
    # Ячейка нашего типа?
    if isinstance(item, MyWidgetItem):
        cell_info = (MyWidgetItem)self.result_table.getItem(row, col)
        cell_value = cell_info.value(defaultValue="nichego_nyet")
→ Ссылка