Помогите создать метод добавления и удаления данных в bd, в таблицу с графическим отображением. PYTHON
Помогите пожалуйста реализовать добавление и удаление данных в таблице SQLITE. По кнопке добавить запись нужно как-то ввести запись и добавить её в базу данных, а по кнопке удалить запись, запись должна удаляться.
После удаления или добавления записей, графическое построение плана должно обновляться. сейчас скину код всех модулей, заранее благодарен всем участников форума за помощь.
файл mainWindow.py :
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainWindow.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(1087, 593)
MainWindow.setMinimumSize(QtCore.QSize(1087, 593))
MainWindow.setMaximumSize(QtCore.QSize(1087, 593))
MainWindow.setWindowTitle("Просмотр Плана Секции")
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_4 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_4.setGeometry(QtCore.QRect(845, 506, 209, 50))
self.pushButton_4.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
self.pushButton_4.setObjectName("pushButton_4")
self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_8.setEnabled(True)
self.pushButton_8.setGeometry(QtCore.QRect(845, 300, 209, 50))
self.pushButton_8.setAutoFillBackground(False)
self.pushButton_8.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
self.pushButton_8.setObjectName("pushButton_8")
self.pushButton_7 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_7.setGeometry(QtCore.QRect(845, 200, 209, 50))
self.pushButton_7.setStyleSheet("font: 75 15pt \"MS Shell Dlg 2\";")
self.pushButton_7.setObjectName("pushButton_7")
self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
self.graphicsView.setGeometry(QtCore.QRect(30, 20, 775, 535))
self.graphicsView.setObjectName("graphicsView")
'''''
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(650, 0, 71, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
'''''
self.label = QtWidgets.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(230, 17, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label.setFont(font)
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(self.centralwidget)
self.label_2.setGeometry(QtCore.QRect(360, 17, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_2.setFont(font)
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(self.centralwidget)
self.label_3.setGeometry(QtCore.QRect(495, 17, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_3.setFont(font)
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(self.centralwidget)
self.label_4.setGeometry(QtCore.QRect(625, 17, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_4.setFont(font)
self.label_4.setObjectName("label_4")
self.label_5 = QtWidgets.QLabel(self.centralwidget)
self.label_5.setGeometry(QtCore.QRect(625, 440, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_5.setFont(font)
self.label_5.setObjectName("label_5")
self.label_6 = QtWidgets.QLabel(self.centralwidget)
self.label_6.setGeometry(QtCore.QRect(495, 440, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_6.setFont(font)
self.label_6.setObjectName("label_6")
self.label_7 = QtWidgets.QLabel(self.centralwidget)
self.label_7.setGeometry(QtCore.QRect(360, 440, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_7.setFont(font)
self.label_7.setObjectName("label_7")
self.label_8 = QtWidgets.QLabel(self.centralwidget)
self.label_8.setGeometry(QtCore.QRect(230, 440, 105, 21))
font = QtGui.QFont()
font.setPointSize(9)
font.setBold(True)
font.setWeight(75)
self.label_8.setFont(font)
self.label_8.setObjectName("label_8")
MainWindow.setCentralWidget(self.centralwidget)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
self.pushButton_4.setText(_translate("MainWindow", "Выход"))
self.pushButton_8.setText(_translate("MainWindow", "Просмотр"))
self.pushButton_7.setText(_translate("MainWindow", "Проживающие"))
self.label.setText(_translate("MainWindow", "Комната 131"))
self.label_2.setText(_translate("MainWindow", "Комната 132"))
self.label_3.setText(_translate("MainWindow", "Комната 133"))
self.label_4.setText(_translate("MainWindow", "Комната 134"))
self.label_5.setText(_translate("MainWindow", "Комната 135"))
self.label_6.setText(_translate("MainWindow", "Комната 136"))
self.label_7.setText(_translate("MainWindow", "Комната 137"))
self.label_8.setText(_translate("MainWindow", "Комната 138"))
файл lodgers.py :
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'lodgers.ui'
#
# Created by: PyQt5 UI code generator 5.15.1
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtWidgets
class Ui_lodgers(object):
def setupUi(self, lodgers):
lodgers.setObjectName("lodgers")
lodgers.resize(1087, 593)
lodgers.setMinimumSize(QtCore.QSize(1087, 593))
lodgers.setMaximumSize(QtCore.QSize(1087, 593))
self.centralwidget = QtWidgets.QWidget(lodgers)
self.centralwidget.setObjectName("centralwidget")
self.pushButton_8 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_8.setEnabled(True)
self.pushButton_8.setGeometry(QtCore.QRect(10, 530, 209, 40))
self.pushButton_8.setAutoFillBackground(False)
self.pushButton_8.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
self.pushButton_8.setObjectName("pushButton_8")
self.pushButton_9 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_9.setEnabled(True)
self.pushButton_9.setGeometry(QtCore.QRect(600, 392, 209, 40))
self.pushButton_9.setAutoFillBackground(False)
self.pushButton_9.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
self.pushButton_9.setObjectName("pushButton_9")
self.pushButton_10 = QtWidgets.QPushButton(self.centralwidget)
self.pushButton_10.setEnabled(True)
self.pushButton_10.setGeometry(QtCore.QRect(850, 392, 209, 40))
self.pushButton_10.setAutoFillBackground(False)
self.pushButton_10.setStyleSheet("font: 75 14pt \"MS Shell Dlg 2\";")
self.pushButton_10.setObjectName("pushButton_10")
self.tableView_1 = QtWidgets.QTableView(self.centralwidget)
self.tableView_1.setGeometry(QtCore.QRect(10, 20, 551, 411))
self.tableView_1.setObjectName("tableView_1")
lodgers.setCentralWidget(self.centralwidget)
self.retranslateUi(lodgers)
QtCore.QMetaObject.connectSlotsByName(lodgers)
def retranslateUi(self, lodgers):
_translate = QtCore.QCoreApplication.translate
lodgers.setWindowTitle(_translate("lodgers", "Проживающие"))
self.pushButton_8.setText(_translate("lodgers", "Назад"))
self.pushButton_9.setText(_translate("RoomWindow", "Добавить запись"))
self.pushButton_10.setText(_translate("RoomWindow", "Удалить запись"))
файл main.py :
import sys
from mainWindow import Ui_MainWindow
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtCore import Qt
from getRooms import Lodgers
class ExampleApp(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.scene = QtWidgets.QGraphicsScene()
self.setupUi(self)
self.lodgers = Lodgers()
self.lodgers.pushButton_8.clicked.connect(self.returnMainWindow1)
self.rоом_beds = []
self.rоом_rect = {
'131': 0,
'132': 1,
'133': 2,
'134': 3,
'135': 4,
'136': 5,
'137': 6,
'138': 7,
}
self.pushButton_7.clicked.connect(self.openlodgers)
# Функция закрытия главного окна по кнопке Выход
self.pushButton_4.clicked.connect(self.close)
self.scene.addPixmap(QtGui.QPixmap("section_sketch.png"))
self.pushButton_8.clicked.connect(self.drowRooms)
self.graphicsView.setScene(self.scene)
# Метод для отрисовки
def drowRooms(self):
if not self.lodgers.rоом_beds:
msg = QtWidgets.QMessageBox.information(
self,
'Message',
f'Просматривать рано. \n'
f'Нажмите кнопку `Проживающие` и выполните необходимые корректировки.'
)
return
self.Rooms = []
self.Rooms.append((
# Рисование прямоугольников для 131 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя через список)
self.scene.addRect(195, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1311
self.scene.addRect(240, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1312
self.scene.addRect(195, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1313
self.scene.addRect(240, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1314
self.Rooms.append((
# Рисование прямоугольников для 132 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(330, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1321
self.scene.addRect(375, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1322
self.scene.addRect(330, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1323
self.scene.addRect(375, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1324
self.Rooms.append((
# Рисование прямоугольников для 133 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(465, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1331
self.scene.addRect(510, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1332
self.scene.addRect(465, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1333
self.scene.addRect(510, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1334
self.Rooms.append((
# Рисование прямоугольников для 134 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(595, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1341
self.scene.addRect(640, 40, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1342
self.scene.addRect(595, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1343
self.scene.addRect(640, 85, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1344
self.Rooms.append((
# Рисование прямоугольников для 135 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(595, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1351
self.scene.addRect(640, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1352
self.scene.addRect(595, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1353
self.scene.addRect(640, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1354
self.Rooms.append((
# Рисование прямоугольников для 136 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(465, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1361
self.scene.addRect(510, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1362
self.scene.addRect(465, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1363
self.scene.addRect(510, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1364
self.Rooms.append((
# Рисование прямоугольников для 137 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(330, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1371
self.scene.addRect(375, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1372
self.scene.addRect(330, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1373
self.scene.addRect(375, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1374
self.Rooms.append((
# Рисование прямоугольников для 138 комнаты (обозначения для того чтобы в дальнеёшем присвоить прямоугольникам имя)
self.scene.addRect(195, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1381
self.scene.addRect(240, 320, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1382
self.scene.addRect(195, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)), # 1383
self.scene.addRect(240, 365, 35, 35, pen=QtGui.QPen(Qt.black), brush=QtGui.QBrush(Qt.green)))) # 1384
# список сформированный в новом классе
for k, v in self.lodgers.rоом_beds:
self.Rooms[self.rоом_rect[k]][int(v)].setBrush(QtGui.QBrush(Qt.red))
def openlodgers(self):
self.hide()
self.lodgers.show()
# Функция для возвращения на главное окно (Из окна проживающие) по кнопке Назад
def returnMainWindow1(self):
self.lodgers._getRooms() # формирование списка self.lodgers.rоом_beds
self.drowRooms() # отрисовка
self.lodgers.close()
self.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
window = ExampleApp()
window.show()
sys.exit(app.exec_())
файл getRooms.py:
from PyQt5 import QtWidgets
from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtSql import QSqlTableModel
from lodgers import Ui_lodgers
# новый класс
class Lodgers(QtWidgets.QMainWindow, Ui_lodgers):
def __init__(self, parent=None):
super(Lodgers, self).__init__(parent)
self.setupUi(self)
sdb = QSqlDatabase.addDatabase('QSQLITE')
sdb.setDatabaseName('baza.db')
sdb.open()
self.model = QSqlTableModel(db=sdb)
self.model.setTable("users")
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
self.model.select()
self.tableView_1.setModel(self.model)
self.rоом_beds = []
def _getRooms(self):
self.rоом_beds = []
for row in range(self.model.rowCount()):
if self.model.data(self.model.index(row, 2)) == 1:
rоом_bed = str(self.model.data(
self.model.index(row, 1)))[:3], \
str(self.model.data(self.model.index(row, 1)))[3]
self.rоом_beds.append(rоом_bed)
Ответы (1 шт):
Чтобы выполнить операцию вставки, просто вызовите метод
insertRow(row), чтобы передать значение индекса, чтобы определить позицию для вставки.row=0для вставки в первую строку.
МетодsetData()может использоваться для вставки или обновления значений. Он требует двух параметров: первый - это позиция, а второй - вставленные данные. Наконец, вызовите методsubmit(), чтобы зафиксировать изменения, которые мы внесли в базу данных.Удалить строку: вызвать метод
removeRow()для передачи значения индекса, т.е. вам надо выбрать строку, которую вы хотите удалить.self.model.removeRow(self.tableView_1.currentIndex().row())Все, я внес изменения только модуль
getRooms.py
getRooms.py
from PyQt5 import QtWidgets
from PyQt5.QtSql import QSqlDatabase
from PyQt5.QtSql import QSqlTableModel
from lodgers import Ui_lodgers
# новый класс
class Lodgers(QtWidgets.QMainWindow, Ui_lodgers):
def __init__(self, parent=None):
super(Lodgers, self).__init__(parent)
self.setupUi(self)
sdb = QSqlDatabase.addDatabase('QSQLITE')
sdb.setDatabaseName('baza_1214255.db') # baza.db установите свою
sdb.open()
self.model = QSqlTableModel(db=sdb)
self.model.setTable("users")
self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
self.model.select()
self.tableView_1.setModel(self.model)
self.rоом_beds = []
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
self.pushButton_9.clicked.connect(self.on_add_record) # "Добавить запись"))
self.pushButton_10.clicked.connect(self.on_del_record) # "Удалить запись"))
def on_add_record(self):
row = self.tableView_1.selectionModel().currentIndex().row()
if self.tableView_1.selectionModel().currentIndex().row() == -1:
row = 0
self.model.insertRow(row)
else:
row = row + 1
self.model.insertRow(row)
self.model.setData(self.model.index(row, 0), 'ФИО NEW')
self.model.setData(self.model.index(row, 1), '0000')
self.model.setData(self.model.index(row, 2), '0')
self.model.setData(self.model.index(row, 3), '0')
self.model.submit()
def on_del_record(self):
self.model.removeRow(self.tableView_1.currentIndex().row())
self.model.select()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def _getRooms(self):
self.rоом_beds = []
for row in range(self.model.rowCount()):
if self.model.data(self.model.index(row, 2)) == 1:
rоом_bed = str(self.model.data(
self.model.index(row, 1)))[:3], \
str(self.model.data(self.model.index(row, 1)))[3]
self.rоом_beds.append(rоом_bed)



