Работа с ячейками PyQt5 Python
У меня программа получает данные с оборудования для проверки радиостанций и записывает их в таблицу, несколько ячеек в строке остаются пустыми, т.к. эти данные не получить и вводить их нужно самому вручную.
Возникло два вопроса:
как можно поставить условие в ячейку, например если я ввожу значение меньше 50, оно заменяется на «N/R»?
Как выяснить содержит ли ячейка какие нибудь данные? После проверки радиостанции заполняется строка и если ячейка пустая, то нужно вывести дефолтное значение.
Помогите пожалуйста разобраться.
Можете показать на примере?
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 шт):
Если вы используете QTableWidget, то для тонкой настройки поведения ячеек можно наследовать QTableWidgetItem и сделать с наследниками все, что вы хотите.
Например:
- как можно поставить условие в ячейку, например если я ввожу значение меньше 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))
- Как выяснить содержит ли ячейка какие нибудь данные? После проверки радиостанции заполняется строка и если ячейка пустая, то нужно вывести дефолтное значение.
# метод какого-то класса
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")