from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QGridLayout, QWidget,QTableWidget, QTableWidgetItem, QComboBox
Здесь необходимо обратить внимание на то, что мы импортируем файл tabl (3-я строка). Из него будут браться наши виджеты, сделанные в Designer.
Для разработки кода привожу заготовку, основу программы и туда мы будем добавлять функции (методы) .
Рис. 8 Заготовка стандартная для разработки кода с использованием Designer
Особенностью является название класса GL-Windows и в заголовке класса необходимо указать наш файл tabl.Ui_MainWindow. Между этими двумя фрагментами заносится код программы с учетом названий используемых виджетов (кнопок, меток, таблицы). Для работы в Designer необходимо ознакомиться с Объектно-ориентированным программированием (ООП).
Текст для копирования без учета пробелов:
self.viv_records()
def viv_records(self): #Ввод в таблицу данных из базы
global query
self.setupUi(self)# Это нужно для инициализации нашего дизайна tabl.ui
con=QtSql.QSqlDatabase.addDatabase('QSQLITE') #тип базы данных и создание соединения
con.setDatabaseName('data.sqlite') #вызов таблицы из базы
con.open() #открытие соединения
query=QtSql.QSqlQuery()
query.exec("select * from finance")
if query.isActive(): #если активно соединение
query.first();i=0 # к началу таблицы finance
while query.isValid():
# заполняем i-ю строку:
self.table.setRowCount(i)#задаем количество строк в таблице
self.table.insertRow(i) #Вставка строки после i-ой строки
self.table.setItem(i, 0, QTableWidgetItem(str(query.value('id'))))
self.table.setItem(i, 1, QTableWidgetItem(query.value('description')))
self.table.setItem(i, 2, QTableWidgetItem(query.value('costs')))
self.table.setItem(i, 3, QTableWidgetItem(str(query.value('total'))))
i=i+1;query.next()#следующая запись
Рис.9. Вывод таблицы finance из базы данных в таблицу tablewidget
После self.setupUi(self) вставим текст из рис.9. Функция viv_records(self) будет выводить таблицу finance в таблицу table. Обычно функции вызываютс по нажатии на кнопку. А мне нужно, чтобы она сразу при запуске выполнялась и в то же время можно было ее вызвать на выполнение при нажатии на кнопку .
Рис. 10. Использование кнопок для вызова функций
Заполнение таблицы tablewidget.
При нажатии на кнопку "+" (рис.3 на стр. 1) вызовем функцию insert_0_str_tabl(self) с помощью кнопки self.btn_0_insert_tab.clicked.connect(self.insert_0_str_tabl)
def insert_0_str_tabl(self): #вставка пустой строки в таблицу table
rowPosition = self.table.rowCount()#Определение количества строк в таблице
self.table.insertRow(rowPosition)#Вставка строки
new=rowPosition #Далее заполняем строку
self.table.setItem(new, 0, QTableWidgetItem(' 0')) # не менее 3-х пробелов
self.table.setItem(new, 1, QTableWidgetItem(' 0')) # для каждого столбца
self.table.setItem(new, 2, QTableWidgetItem(' 0'))
self.table.setItem(new, 3, QTableWidgetItem(' 0'))
Рис. 11 Функция вставки пустой строки в tablewidget
Рис.12. Вставка пустой строки
Удаление строки в таблице
def del_str(self):#Удаление строки из таблицы
row = self.table.currentItem().row()#определение номера удаляемой строки
self.table.removeRow(row) #Удаление строки
Рис. 13 Удаление строки из таблицы tablewidget
При нажатии на "-" (рис. 3 на стр. 1)вызовем функцию del_str(self) с помощью кнопки btn_del: