|
Программирование на Питоне 3, Python 3. Базы данных. Модели, связанные с данными
1 2 3 4 5 6
Модель, связанная с таблицей Table View
Если необходимо дать пользователю корректировать данные, удалять и добавлять записи, следует использовать класс SQLTableModel. непосредственно связанный с таблицей базы данных.
Конструктор класса:
<object>=SQLTableModel([parent=None],[,][,db=QSqlDatabase]) . Необязательный параметр db задает соединение с базойданных,запрос к которой следует выполнить. Если он не указан, будет использоваться соединение по умолчанию (стр. 611. Н.Прохоренок,В. Дронов).
Далее приводится текст программы для вывода таблицы с возможностью редактирования. Используется класс QTableView для представления модели:
 
Текст программы для копирования:
import sys
import tableview
from PyQt5 import QtCore, QtGui, QtWidgets,QtSql
from PyQt5.QtWidgets import QWidget, QToolTip
from PyQt5.QtGui import QFont
#611 стр Н.Прохоренок В.Дронов очень хороший учебник
#Выод таблицы QtableView без Designer. С ООП, в дополнительном окне
class GL_Window(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
#методом super() мы явно вызываем родительский конструктор.
self.resize(700,700)
self.setWindowtitle('Работа с таблицей без designer Qtableview')
self.show()
self.statusBar().showMessage('Строка состояния для вывода информации ')
self.initUI()
def initUI(self):
self.w=QtWidgets.QWidget()#создаем экземпляр дополнительного окна
self.w.setWindowtitle('Расчет финансов')
con=QtSql.QSqlDatabase.addDatabase('QSQLITE') #тип базы данных и создание соединения
con.setDatabaseName('data.sqlite') #вызов таблицы из базы
con.open() #открытие соединения
# Создаем модель
self.stm=QtSql.QSqlTableModel(parent=self.w)
self.stm.setTable('finance')#Задает имя таблицы базы данных
self.stm.select()# Считывает данные из таблицы базы данных в модель
self.stm.setHeaderData(0,QtCore.Qt.Horizontal,'ID')#4-е строки-заголовки полей
self.stm.setHeaderData(1,QtCore.Qt.Horizontal,'Наименование')
self.stm.setHeaderData(2,QtCore.Qt.Horizontal,'Операция')
self.stm.setHeaderData(3,QtCore.Qt.Horizontal,'Сумма')
#Создаем для модели таблицы представление:
vbox=QtWidgets.QVBoxLayout()#вертикальный контейнер для таблицы tableview
self.tv=QtWidgets.QTableView()#Создаем представление для вывода таблицы Tableview
self.tv.setModel(self.stm)#Заносим таблицу в представление
#Скрываем первый столбец, в котором выводится идентификатор
self.tv.hideColumn(0)
self.tv.setColumnWidth(1,200) #ширина столбца
self.tv.setColumnWidth(2,100)
self.tv.setColumnWidth(3,70)
vbox.addWidget(self.tv)#помещение представления с таблицей в контейнер
QToolTip.setFont(QFont('SansSerif', 20))#шрифт и размер для комментария к кнопкам
self.btnAdd=QtWidgets.QPushButton('+')#кнопка для добавления записи
self.btnDel=QtWidgets.QPushButton('-')#кнопка для удаления записи
self.btnAdd.clicked.connect(self.addRecord) #вызов функции для добавления записи
self.btnAdd.setToolTip('ДОБАВИТЬ ЗАПИСЬ')#вывод при наведени на кнопку
vbox.addWidget(self.btnAdd) #помещение кнопки в контейнер
self.btnDel.clicked.connect(self.delRecord)#вызов функции для удаления записи
self.btnDel.setToolTip('УДАЛИТЬ ЗАПИСЬ')#вывод при наведени на кнопку
vbox.addWidget(self.btnDel)#помещение кнопки джля удаления в контейнер
self.w.setLayout(vbox)#помещение контейнера
self.w.resize(500,500)
self.w.show()#открытие экземпляра с контейнером и таблицей Tableview
#https://docviewer.yandex.ru/view/16201825
def addRecord(self):
self.stm.insertRow(self.stm.rowCount())
def delRecord(self):
self.stm.removeRow(self.tv.currentIndex().row())
self.stm.select()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)# Новый экземпляр QApplication
win = GL_Window()#обязательно
sys.exit(app.exec_())
|
Рис.1 Текст программы для редактирования таблицы в Питоне (QPyt5).
После запуска программы получим:
рис.2. Вывод таблицы для редактирования с помощью QtableView
Рис.3 Добавление записи в таблицу.
Рис.4. Ввод информации в добавленую запись и комментарий к кнопке
1 2 3 4 5 6
|
|