PySide6. Исчезают данные из строки в БД, после заполнения ячейки из списка QComboBox
Начинающий программист просит помощи. Нужно в БД в 4й столбец заносить значения из QComboBox (из list). Сейчас, в ячейках указанного столбца, я могу видеть список, выбирать из него значение и видеть в ячейке БД свой выбор. Но как только я перехожу на другую строчку/столбец/ячейку - все данные на заполненной строке исчезают. Так происходит в каждой заполняемой из QComboBox строке. Прошу объяснить, а лучше показать как мне это исправить. Прошу учесть, что я только начиню разбираться. На картинке состояние после "заполнения" 4го столбца('Профиль/Метиз')
class DB_support:
def create_connection(self, DBpath=None, DBfilename=None):
os.makedirs(DBpath, exist_ok=True)
__db = QSqlDatabase.addDatabase('QSQLITE')
__db.setDatabaseName(DBpath + r'\\' + DBfilename + '.db')
if not __db.open():
x = [False, "база не подключилась"]
sys.exit(1)
else:
x = [True, "база подключилась"]
self.DBname = str(DBfilename + '.db')
return
def setDBmodelToWorking(self, DBname):
model = QSqlTableModel(None)
model.setTable(DBname)
return model
def Show_baseView_DBtab(self, DBmodel):
DBmodel.select()
DBmodel.setHeaderData(0, Qt.Horizontal, 'Наименование проекта')
DBmodel.setHeaderData(1, Qt.Horizontal, 'Марка')
DBmodel.setHeaderData(2, Qt.Horizontal, 'Позиция')
DBmodel.setHeaderData(3, Qt.Horizontal, 'Профиль/Метиз')
DBmodel.setHeaderData(4, Qt.Horizontal, 'Параметр "А"')
DBmodel.setHeaderData(5, Qt.Horizontal, 'Параметр "Б"')
DBmodel.setHeaderData(6, Qt.Horizontal, 'Длина')
DBmodel.removeColumn(0) # скрыть колонку с ID(№0)
class ComboBoxDelegate(QStyledItemDelegate):
def __init__(self, parent=None):
super().__init__(parent)
self.datas_comboList = ["First", "Second", "Third"]
def createEditor(self, parent, option, index):
comboBox = QComboBox(parent)
comboBox.addItems(self.datas_comboList)
comboBox.setEditable(False)
return comboBox
def setEditorData(self, editor, index):
text = index.model().data(index, Qt.DisplayRole)
idx = editor.findText(str(text))
if idx >= 0:
editor.setCurrentIndex(idx)
def setModelData(self, editor, model, index):
model.setData(index, editor.currentText(), Qt.EditRole)
print(editor.currentText()) # 'editor.currentText()' окончательное значение из combobox
model.dataChanged.connect(model.submitAll)
class MainWindow(QMainWindow): # класс из файла UI
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow() # класс из файла UI
self.ui.setupUi(self)
self.obj = Supp_exel()
self.conDB =DB_support()
# -----------модель DB
self.conDB.create_connection(r'E:\Documents\all Works\PROG\DBs', 'proba')
self.modelDB = self.conDB.setDBmodelToWorking('MetallSpec') # 'экземпляр модели DB
# -----------модель DB
# -----------------представления Таблиц
self.ui.qtv_DB_MetallSpec.setModel(self.modelDB) # Устанавливаем модель данных для главной панели таблицы
self.conDB.Show_baseView_DBtab(self.modelDB)
# -----------------представления Таблиц
# ---------------------Установка ComboBoxDelegate в столбец модели
self.setComboboxDatas()
def setComboboxDatas(self, columnIndex=3):
delegate = ComboBoxDelegate()
self.ui.qtv_DB_MetallSpec.setItemDelegateForColumn(columnIndex, delegate)
self.modelDB.submitAll()