FishHook
Дайте код программы,
Форма создана в QTDisigner название qtable
На форме кнопка pushButton и QTableWidget под именем tableWidget_2
База SQLite str_chek.db
В ней таблица str_chek
Со столбцами id, cheknum, description, quant, cost, total
Код
from PyQt5.QtWidgets import QTableWidgetItem
from PyQt5.QtWidgets import QWidget, QApplication
from PyQt5.QtCore import Qt
from qtable import *
import sys
from PyQt5.QtSql import (QSqlDatabase, QSqlQuery) #and so on.
import sqlite3
data = []
class mywindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.view1()
# очистка таблицы при клике на кнопку.
self.ui.pushButton.clicked.connect(self.view1)
nn = 1
self.edit_row()
def view1(self): #очистка и перезапись таблицы
self.clear()
self.conn = sqlite3.connect('str_chek.db')
self.c1 = self.conn.cursor()
self.c1.execute('''SELECT MAX(cheknum)
FROM str_chek''')
self.conn.commit()
nn = self.c1.fetchone()
#print(nn)
nn = str(nn)
nn = nn.replace(',', '')
#print(nn)
nn = nn.replace('(', ' ')
#print(nn)
nn = nn.replace(')', ' ')
#print(nn)
nn = str(nn)
self.conn = sqlite3.connect('str_chek.db')
self.c = self.conn.cursor()
self.c.execute("SELECT * FROM str_chek WHERE cheknum = '%s' ORDER BY id DESC" % nn)
rows = self.c.fetchall()
for row in rows:
inx = rows.index(row)
self.ui.tableWidget_2.insertRow(inx)
# add more if there is more columns in the database.
self.ui.tableWidget_2.setItem(inx, 0, QTableWidgetItem(str(row[0])))
self.ui.tableWidget_2.setItem(inx, 1, QTableWidgetItem(str(row[1])))
self.ui.tableWidget_2.setItem(inx, 2, QTableWidgetItem(str(row[2])))
self.ui.tableWidget_2.setItem(inx, 3, QTableWidgetItem(str(row[3])))
self.ui.tableWidget_2.setItem(inx, 4, QTableWidgetItem(str(row[4])))
self.ui.tableWidget_2.setItem(inx, 5, QTableWidgetItem(str(row[5])))
#self.ui.tableWidget_2.itemChanged(QTableWidgetItem *item) [edit_row()]
# эту строку пока не смог прикрутить...
def keyPressEvent(self, e):
if e.key() == Qt.Key_Return:
self.edit_row()
def clear(self):
self.ui.tableWidget_2.setRowCount(0)
def clear_row(self):
self.ui.tableWidget_2.setRowCount(0)
def edit_row(self):
row1 = self.ui.tableWidget_2.currentRow()
col = self.ui.tableWidget_2.currentColumn()
r = float(row1)
if r < 0:
#print("List is empty")
return
else:
id1 = self.ui.tableWidget_2.item(row1, 0)
id1 = id1.text()
cheknum = self.ui.tableWidget_2.item(row1, 1)
cheknum = cheknum.text()
description = self.ui.tableWidget_2.item(row1,2)
description = description.text()
quant = self.ui.tableWidget_2.item(row1, 3)
quant = quant.text()
cost = self.ui.tableWidget_2.item(row1, 4)
cost = cost.text()
total = self.ui.tableWidget_2.item(row1, 5)
total = total.text()
str1 = 'UPDATE str_chek SET cheknum='
str2 = str(cheknum)
str5 = ', quant='
str6 = str(quant)
str3 = ' WHERE id ='
str4 = str(id1)
#str5 = '"'
str0 = str1 + str2 +str5 + str6 + str3 + str4
print(str0)
self.c.execute('''{}'''.format(str0))
print(str0)
self.conn.commit()
print(cheknum)
print(description)
print(quant)
print(cost)
print(total)
def row_column_clicked(self,row, col, value):
row = self.tableWidget.currentRow()
col = self.tableWidget.currentColumn()
value = self.tableWidget.item(row, col)
app = QtWidgets.QApplication([])
win = mywindow()
win.show()
sys.exit(app.exec())
Print вставлены для просмотра значений.
Всё работает, но нажимать ENTER приходится дважды, по концу ввода в ячеку и по отработке сигнала KEYPress/
Хотелось бы обновлять текущую запись и сохранять значение в базе автоматом, по сигналу?? или иначе.
Не знаю, понятно ли..
Если нет времени, ок.
Я справлюсь.
И не такое разруливали.