#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)