ПИТОН 3 ДЛЯ НАЧИНАЮЩИХ. РАБОТА С QTABLEWIDGET В PyQt5. РЕДАКТИРОВАНИЕ ПОЛЕЙ, ВСТАВКА, УДАЛЕНИЕ, РЕДАКТИРОВАНИЕ ЯЧЕЕК. ИСПОЛЬЗОВАНИЕ DESIGNER.

Использование Designer для разработки кода

1 2 3 4 5 6

Для работы нам понадобятся классы PyQt5:

import sys
import vvod_tabl
import tabl,korvv
from PyQt5 import QtCore, QtGui, QtWidgets,QtSql
import sqlite3

from PyQt5.QtCore import Qt

from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtWidgets import QApplication, QGridLayout, QWidget,QTableWidget, QTableWidgetItem, QComboBox

Здесь необходимо обратить внимание на то, что мы импортируем файл tabl (3-я строка). Из него будут браться наши виджеты, сделанные в Designer.

Для разработки кода привожу заготовку, основу программы и туда мы будем добавлять функции (методы) .

Заготовка кода для работы в Designer

Заготовка для кода в Питоне Designer

Рис. 8 Заготовка стандартная для разработки кода с использованием Designer

Особенностью является название класса GL-Windows и в заголовке класса необходимо указать наш файл tabl.Ui_MainWindow. Между этими двумя фрагментами заносится код программы с учетом названий используемых виджетов (кнопок, меток, таблицы). Для работы в Designer необходимо ознакомиться с Объектно-ориентированным программированием (ООП).

Вывод из базы данных в таблицу tablewidget

Текст для копирования без учета пробелов:

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)

вставка пустой строки в tablewidget

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

Вставка пустой строки в tablewidget

Рис.12. Вставка пустой строки

Удаление строки в таблице

Удаление строки в таблице  tablewidget

def del_str(self):#Удаление строки из таблицы
row = self.table.currentItem().row()#определение номера удаляемой строки
self.table.removeRow(row) #Удаление строки

Рис. 13 Удаление строки из таблицы tablewidget

При нажатии на "-" (рис. 3 на стр. 1)вызовем функцию del_str(self) с помощью кнопки btn_del:

self.btn_del.clicked.connect(self.del_str)#удаление строки.

Продолжение на следующей странице1 2 3 4 5 6