Нужно задержать сигнал об изменении элемента до тех пор, пока мои данные не будут загружены

#python #mysql #pyqt5 #qtablewidget

Вопрос:

Я загружаю базу данных mysql в tablewidget.

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

Проблема в том, что функции работают до того, как я загружу свою базу данных. Эффективно сохраняя список ячеек, которые мне не нужны, и выводя непрерывные сообщения об ошибках во время загрузки.

Как остановить работу функций до тех пор, пока база данных не будет загружена?

 def log_change(self, item):
    self.changed_items.append([item.row(),item.column()])


def item_changed(self, Qitem,item):
    if (item.column())%2 == 0:
        try:
            test = float(Qitem.text())
        except ValueError:
            Msgbox = QMessageBox()
            Msgbox.setText("Error, value must be number!")
            Msgbox.exec()
            Qitem.setText(str(''))
 

Ответ №1:

Есть 2 варианта:

  • Используйте флаг:
     # in constructor
    self.is_loading = False

def load_from_db(self):
    # in load function
    self.is_loading = True
    # load from db
    # ...
    self.is_loading = False

# foo_callback is item_changed by example
def foo_callback(self, arg1, arg2, ...):
    if self.is_loading:
         return
    # do work
 
  • Используйте блоксигналы
 self.tablewidget.blockSignals(True)
# load from db
# ...
self.tablewidget.blockSignals(False)