Кнопки панели инструментов из текстового редактора

Одна из проблем заключается в том, что вы используете несоответствующую стратегию, если вы используете OnManualSubmit, вы должны вызвать метод submitAll(), чтобы изменения записывались в базу данных, если вы не хотите это делать, это лучше использовать OnRowChange, с этой стратегией изменения будут сделаны, когда после добавления значений давления введите или выберите другую строку.

Если вы хотите удалить строку из базы данных, вы должны использовать deleteRowFromTable(), вы используете removeRow(), но это удаляет только строку в представлении, но не в базе данных, поэтому через мгновение данные обновляются, показывая себе новую строку.

def addRecord():
    model.insertRow(model.rowCount())
    view.scrollToBottom()

def delRecord():
    model.deleteRowFromTable(view.currentIndex().row())
    model.select()

app = QtWidgets.QApplication(sys.argv)

window = QtWidgets.QWidget()
window.setWindowTitle("QRelationalSqlTableModel")

con = QtSql.QSqlDatabase.addDatabase('QSQLITE')
con.setDatabaseName('drinks.db')
con.open()

model = QtSql.QSqlRelationalTableModel(parent = window)
model.setEditStrategy(QtSql.QSqlTableModel.OnRowChange)
model. setTable('drinks')
model.setRelation(2, QtSql.QSqlRelation('category', 'id', 'drinktype'))
model.select()

model.setHeaderData(1, QtCore.Qt.Horizontal, 'Name')
model.setHeaderData(3, QtCore.Qt.Horizontal, 'Type of drink')

vbox = QtWidgets.QVBoxLayout()

view = QtWidgets.QTableView()
view.setModel(model)
view.setItemDelegate(QtSql.QSqlRelationalDelegate(view))
view.hideColumn(0)
view.setColumnWidth(1, 150)
view.setColumnWidth(2, 150)

vbox.addWidget(view)
btnAdd = QtWidgets.QPushButton("&Add record")
btnAdd.clicked.connect(addRecord)
vbox.addWidget(btnAdd)
btnDel = QtWidgets.QPushButton("&Delete record")
btnDel.clicked.connect(delRecord)
vbox.addWidget(btnDel)

window.setLayout(vbox)
window.resize(430, 250)
window.show()
sys.exit(app.exec_())
0
задан Héctor Valido 19 January 2019 в 01:44
поделиться