|
ПИТОН 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.
Для разработки кода привожу заготовку, основу программы и туда мы будем добавлять функции (методы) .
Рис. 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. Обычно функции вызываютс по нажатии на кнопку. А мне нужно, чтобы она сразу при запуске выполнялась и в то же время можно было ее вызвать на выполнение при нажатии на кнопку .

Текст для копирования:
self.btn_dob.clicked.connect(self.dob_str_form)#добавление строки в форме
self.btn_del.clicked.connect(self.del_str)#удаление строки
self.btn_head2.clicked.connect(self.sort_naim_tabl)#сортировка по наименованию в таблице
self.btn_head4.clicked.connect(self.sort_total_tabl)#сортировка по сумме в таблице
self.btn_0_insert_tab.clicked.connect(self.insert_0_str_tabl)#вставка пустой строки в таблицу
self.btn_insert_tabl.clicked.connect(self.vst_tabl_iz_form)#Вставка данных из временной таблицы в основную
self.btn_edit.clicked.connect(self.korzap)#Создание экземпляра класса для корректировки строки
self.btn_iz_vv.clicked.connect(self.izmenstr)#Вставка измененной строки в таблицу
self.btn_zan_base.clicked.connect(self.zan_base)#Занесение таблицы в базу
self.btn_iz_base.clicked.connect(self.viv_records) #Занесение данных из базы в таблицу |
Рис. 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:
self.btn_del.clicked.connect(self.del_str)#удаление строки.
Продолжение на следующей странице1 2 3 4 5 6
|
|