Визуализировать чек покупок и посчитать итоговую сумму

У меня имеется фрагмент кода, никак не получается написать его на PyQt5. в основном проблема заключалась в cursor() (атрибут не найден и т.д.). Я хочу эту функцию вызывать в окне в каком-нибудь listWidget или table...

import sqlite3 as lite
import sys
def summa():
    con = lite.connect('Продукты.db')
     
    with con:    
        cur = con.cursor()    
        cur.execute("SELECT SUM(Цена) FROM Покупки")
        rows = cur.fetchall()
     
        for row in rows:
            print (row)
summa()

Скрипт создания таблиц БД.

from PyQt5.QtSql import QSqlDatabase, QSqlQuery


db = QSqlDatabase.addDatabase('QSQLITE')
db.setDatabaseName('products.db')
db.open()

query = QSqlQuery()
query.exec_(""" CREATE TABLE dairy
    (id INT(11) PRIMARY KEY, 
     name VARCHAR(30) NOT NULL,
     description VARCHAR(70) NOT NULL, 
     price FLOAT)""")
query.exec_("INSERT INTO dairy (id, name, description, price) " 
            "VALUES (2018010401, 'Молоко 1', 'Описание 1', 59.52)")
query.exec_("INSERT INTO dairy (id, name, description, price) " 
            "VALUES (2018010422, 'Молоко 2', 'Описание 2', 159.2)")
query.exec_("INSERT INTO dairy (id, name, description, price) " 
            "VALUES (2018010555, 'Молоко 3', 'Описание 3', 75)")

query.exec_("SELECT name, description, price FROM dairy")  
while query.next():
    stu_name = query.value(0)
    stu_description = query.value(1)
    stu_price = query.value(2)
    print(stu_name, stu_description, stu_price)

   
query.exec_(""" CREATE TABLE meat
    (id INT(11) PRIMARY KEY, 
     name VARCHAR(30) NOT NULL,
     description VARCHAR(70) NOT NULL, 
     price FLOAT)""")
query.exec_("INSERT INTO meat (id, name, description, price) " 
            "VALUES (1, 'Мясо 1', 'Описание 1', 159.52)")
query.exec_("INSERT INTO meat (id, name, description, price) " 
            "VALUES (2, 'Мясо 2', 'Описание 2', 559.2)")
query.exec_("INSERT INTO meat (id, name, description, price) " 
            "VALUES (3, 'Мясо 3', 'Описание 3', 275)")   
   

query.exec_(""" CREATE TABLE bakery
    (id INT(11) PRIMARY KEY, 
     name VARCHAR(30) NOT NULL,
     description VARCHAR(70) NOT NULL, 
     price FLOAT)""")
query.exec_("INSERT INTO bakery (id, name, description, price) " 
            "VALUES (1, 'Изделие 1', 'Описание 1', 19.52)")
query.exec_("INSERT INTO bakery (id, name, description, price) " 
            "VALUES (2, 'Изделие 2', 'Описание 2', 55.2)")
query.exec_("INSERT INTO bakery (id, name, description, price) " 
            "VALUES (3, 'Изделие 3', 'Описание 3', 25)")      
   

query.exec_(""" CREATE TABLE household
    (id INT(11) PRIMARY KEY, 
     name VARCHAR(30) NOT NULL,
     description VARCHAR(70) NOT NULL, 
     price FLOAT)""")
query.exec_("INSERT INTO household (id, name, description, price) " 
            "VALUES (1, 'Товар 1', 'Описание 1', 719.52)")
query.exec_("INSERT INTO household (id, name, description, price) " 
            "VALUES (2, 'Товар 2', 'Описание 2', 554.2)")
query.exec_("INSERT INTO household (id, name, description, price) " 
            "VALUES (3, 'Товар 3', 'Описание 3', 255)")    
            
   
query.exec_(""" CREATE TABLE purchases
    (id INT(11) NOT NULL, 
     name VARCHAR(30) NOT NULL,
     price FLOAT)""")     

db.close()

Ответы (1 шт):

Автор решения: S. Nick

Проблема заключается в том, что вы плохо объясняете что вы хотите сделать. Из того что я понял, вы как-то хотите визуализировать чек покупки.

Если да, то вот вам возможный вариант решения, основанный на продолжении вашего предыдущего вопроса.

Я добавил class Dialog и метод def buy(self), который вызывается по нажатию кнопки "Купить".

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.Qt import *


class Ui_Wind(object):
    def setupUi(self, Wind):
        Wind.setObjectName("Wind")
        Wind.resize(948, 700)
        font = QtGui.QFont()
        font.setFamily("Agency FB")
        font.setPointSize(16)
        Wind.setFont(font)
        Wind.setAcceptDrops(False)
        Wind.setStyleSheet("background-color:rgb(255, 217, 179)")
        self.listView = QtWidgets.QListView(Wind)
        self.listView.setGeometry(QtCore.QRect(-10, 80, 981, 91))
        self.listView.setStyleSheet("background-color: rgb(243, 194, 147)")
        self.listView.setObjectName("listView")
        
        self.pushButton = QtWidgets.QPushButton(Wind)
        self.pushButton.setGeometry(QtCore.QRect(0, 0, 231, 71))
        font = QtGui.QFont()
        font.setFamily("Script MT Bold")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton.setWhatsThis("")
        self.pushButton.setAccessibleName("")
        self.pushButton.setStyleSheet("background-color:\n""")
        self.pushButton.setText("Молочная продукция")
        icon = QtGui.QIcon()
#        icon.addPixmap(QtGui.QPixmap("im.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
#        self.pushButton.setIcon(icon)
#        self.pushButton.setIconSize(QtCore.QSize(230, 200))
        self.pushButton.setObjectName("pushButton")
        
        self.listView_2 = QtWidgets.QListView(Wind)
        self.listView_2.setGeometry(QtCore.QRect(50, 170, 191, 811))
        self.listView_2.setStyleSheet("background-color: rgb(255, 221, 187)")
        self.listView_2.setObjectName("listView_2")
        self.pushButton_2 = QtWidgets.QPushButton(Wind)
        self.pushButton_2.setGeometry(QtCore.QRect(240, 0, 231, 71))
        font = QtGui.QFont()
        font.setFamily("Script MT Bold")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_2.setFont(font)
        self.pushButton_2.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_2.setWhatsThis("")
        self.pushButton_2.setAccessibleName("")
        self.pushButton_2.setStyleSheet("background-color:\n""")
        self.pushButton_2.setText("Мясная продукция")
        icon1 = QtGui.QIcon()
#        icon1.addPixmap(QtGui.QPixmap("мясо2.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
#        self.pushButton_2.setIcon(icon1)
#        self.pushButton_2.setIconSize(QtCore.QSize(230, 200))
        self.pushButton_2.setObjectName("pushButton_2")
        
        self.pushButton_3 = QtWidgets.QPushButton(Wind)
        self.pushButton_3.setGeometry(QtCore.QRect(480, 0, 231, 71))
        font = QtGui.QFont()
        font.setFamily("Script MT Bold")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_3.setFont(font)
        self.pushButton_3.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_3.setWhatsThis("")
        self.pushButton_3.setAccessibleName("")
        self.pushButton_3.setStyleSheet("background-color:\n""")
        self.pushButton_3.setText("Хлебобулочные Изделия")
        icon2 = QtGui.QIcon()
#        icon2.addPixmap(QtGui.QPixmap("xlewb.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
#        self.pushButton_3.setIcon(icon2)
#        self.pushButton_3.setIconSize(QtCore.QSize(230, 200))
        self.pushButton_3.setObjectName("pushButton_3")
        
        self.pushButton_4 = QtWidgets.QPushButton(Wind)
        self.pushButton_4.setGeometry(QtCore.QRect(720, 0, 231, 71))
        font = QtGui.QFont()
        font.setFamily("Script MT Bold")
        font.setPointSize(14)
        font.setBold(True)
        font.setWeight(75)
        self.pushButton_4.setFont(font)
        self.pushButton_4.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.pushButton_4.setWhatsThis("")
        self.pushButton_4.setAccessibleName("")
        self.pushButton_4.setStyleSheet("background-color:\n""")
        self.pushButton_4.setText("Товары_Для_Дома")
        icon3 = QtGui.QIcon()
#        icon3.addPixmap(QtGui.QPixmap("таврары.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
#        self.pushButton_4.setIcon(icon3)
#        self.pushButton_4.setIconSize(QtCore.QSize(230, 200))
        self.pushButton_4.setObjectName("pushButton_4")
        
        self.listWidget = QtWidgets.QListWidget(Wind)
        self.listWidget.setGeometry(QtCore.QRect(90, 190, 321, 421))
        self.listWidget.setStyleSheet("background-color: rgb(255, 221, 179)")
        self.listWidget.setObjectName("listWidget")
        
        self.listWidget_2 = QtWidgets.QListWidget(Wind)
        self.listWidget_2.setGeometry(QtCore.QRect(590, 190, 321, 421))
        self.listWidget_2.setStyleSheet("background-color: rgb(255, 221, 179)")
        self.listWidget_2.setObjectName("listWidget_2")
        
        self.pushButton_5 = QtWidgets.QPushButton(Wind)
        self.pushButton_5.setGeometry(QtCore.QRect(440, 330, 131, 61))
        self.pushButton_5.setObjectName("pushButton_5")
        
        self.pushButton_6 = QtWidgets.QPushButton(Wind)
        self.pushButton_6.setGeometry(QtCore.QRect(440, 410, 131, 61))
        self.pushButton_6.setObjectName("pushButton_6")
        
        self.pushButton_7 = QtWidgets.QPushButton(Wind)
        self.pushButton_7.setGeometry(QtCore.QRect(680, 650, 141, 71))
        self.pushButton_7.setObjectName("pushButton_7")
        
        self.pushButton_9 = QtWidgets.QPushButton(Wind)
        self.pushButton_9.setGeometry(QtCore.QRect(820, 650, 81, 71))
        self.pushButton_9.setText("pushButton_9")
        icon4 = QtGui.QIcon()
#        icon4.addPixmap(QtGui.QPixmap("изображение_2021-04-24_223918-removebg-preview.png"), QtGui.QIcon.Disabled, QtGui.QIcon.On)
#        self.pushButton_9.setIcon(icon4)
#        self.pushButton_9.setIconSize(QtCore.QSize(100, 100))
        self.pushButton_9.setObjectName("pushButton_9")
        
        self.tableWidget = QtWidgets.QTableView(Wind)
        self.tableWidget.setGeometry(QtCore.QRect(100, 200, 301, 401))
        self.tableWidget.setObjectName("tableWidget")

        self.tableWidget1 = QtWidgets.QTableView(Wind)
        self.tableWidget1.setGeometry(QtCore.QRect(600, 200, 301, 401))
        self.tableWidget1.setObjectName("tableWidget1")

        self.retranslateUi(Wind)
        QtCore.QMetaObject.connectSlotsByName(Wind)

    def retranslateUi(self, Wind):
        _translate = QtCore.QCoreApplication.translate
        Wind.setWindowTitle(_translate("Wind", "Пампейка"))
        self.pushButton_5.setText(_translate("Wind", "Взять"))
        self.pushButton_6.setText(_translate("Wind", "Выгрузить"))
        self.pushButton_7.setText(_translate("Wind", "Купить"))


# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
class Dialog(QtWidgets.QDialog):
    def __init__(self, purchased_products, parent=None):
        super(Dialog, self).__init__(parent)
        self.parent = parent
        self.setStyleSheet("""QDialog, QLabel {
            font-size: 12pt; color: blue; background-color: lightcyan; font-weight: bold;} 
        """)

        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(QtWidgets.QLabel(f'Ваш чек:'), 0, 0, 1, 2, alignment=QtCore.Qt.AlignCenter)
        sum_products = 0
        for i, r in enumerate(purchased_products):
            lbl_name = QtWidgets.QLabel(f'{r[0]}') 
            lbl_price = QtWidgets.QLabel(f'{r[1]:.2f}') 
            layout.addWidget(lbl_name, i+1, 0)
            layout.addWidget(lbl_price, i+1, 1, alignment=QtCore.Qt.AlignRight)
            sum_products += r[1]
        layout.addWidget(QtWidgets.QLabel("Итого:"), i+2, 0)
        layout.addWidget(QtWidgets.QLabel(f"{sum_products:.2f}"), i+2, 1, alignment=QtCore.Qt.AlignRight)
        
        layout.addWidget(QtWidgets.QPushButton("Оплатить", clicked=self.onCliked), i+3, 1)
        
    def onCliked(self):
        msg = QtWidgets.QMessageBox.information(
            None, 'Чек оплачен', 'Спасибо за покупку.')
        # и дальше делайте то что вам надо
        self.close()
# +++  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^      
 
 
class MainWindow(QtWidgets.QMainWindow, Ui_Wind):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        
        self.tableWidget.horizontalHeader().setStretchLastSection(True)
        self.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        self.tableWidget1.horizontalHeader().setStretchLastSection(True)
        self.tableWidget1.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
        
        self.pushButton.clicked.connect(self.milk)
        self.pushButton_2.clicked.connect(self.mco)
        self.pushButton_3.clicked.connect(self.xlebw)
        self.pushButton_4.clicked.connect(self.hometov)
        self.pushButton_5.clicked.connect(self.add_row)
        self.pushButton_6.clicked.connect(self.on_del_record)
        
        self.pushButton_7.clicked.connect(self.buy)                          # !!! +++ <<<====<

        db = QSqlDatabase.addDatabase('QSQLITE')
#        db.setDatabaseName('Продукты.db')
        db.setDatabaseName('products.db')                
        db.open()
        self.pokypki()

# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    def buy(self):
        purchased_products = []
        rows = self.tableWidget1.model().rowCount()
        for row in range(rows):
            name = self.tableWidget1.model().record(row).value(1)
            price = self.tableWidget1.model().record(row).value(2)
            purchased_products.append([name, price])
        self.dialog = Dialog(purchased_products, self)
        self.dialog.exec()
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        
        
    def milk(self):                             
        self.model = QSqlTableModel(self)
        self.model.setTable("dairy")  # Молочная_продукция
        self.model.select()
        self.tableWidget.setModel(self.model)

    def mco(self):             
        self.model = QSqlTableModel(self)
        self.model.setTable("meat")   #  Мясная_продукция
        self.model.select()
        self.tableWidget.setModel(self.model)

    def xlebw(self):                       
        self.model = QSqlTableModel(self)
        self.model.setTable("bakery") #  Хлебобулочные_Изделия
        self.model.select()
        self.tableWidget.setModel(self.model)

    def hometov(self):            
        self.model = QSqlTableModel(self)
        self.model.setTable("household")  #  Товары_Для_Дома
        self.model.select()
        self.tableWidget.setModel(self.model)

    def pokypki(self):                                  
        self.model_purchases = QSqlTableModel(self)
        self.model_purchases.setTable("purchases") # Покупки
        self.model_purchases.select()
        self.tableWidget1.setModel(self.model_purchases)
        
    def add_row(self):
        row = self.tableWidget.currentIndex().row()
        if row == -1:
            msg = QMessageBox.information(
                None, 'Внимание', 'Выберите продукт для покупки.')
            return
        id = self.model.record(row).value(0)    
        name = self.model.record(row).value(1)
        price = self.model.record(row).value(3)
        
        r = self.model_purchases.record()
        r.setValue("id", id)
        r.setValue("name", name)
        r.setValue("price", price)        
        self.model_purchases.insertRecord(-1, r)
        self.model_purchases.select()        

    def on_del_record(self):
        row = self.tableWidget1.currentIndex().row()
        if row == -1:
            msg = QMessageBox.information(self, 'Внимание', 'Выберите продукт для выгрузки.')
            return
        self.model_purchases.removeRow(self.tableWidget1.currentIndex().row())
        self.model_purchases.select()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())
    

введите сюда описание изображения

→ Ссылка