 
Текст программы для копирования:
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_())
|