Python Forum
[PyQt] [Solved]Multiply a number to a DoubleSpinBox
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] [Solved]Multiply a number to a DoubleSpinBox
#9
That's an example for QtSql

create Database

from PyQt5.QtSql import QSqlQuery, QSqlDatabase
from PyQt5.QtWidgets import QMessageBox, QApplication, qApp
 
def createDB():
   db = QSqlDatabase.addDatabase('QSQLITE')
   db.setDatabaseName('inventory2.db')
     
   if not db.open():
      QMessageBox.critical(None, qApp.tr("Cannot open database"),
         qApp.tr("Unable to establish a database connection.\n"
            "This example needs SQLite support. Please read "
            "the Qt SQL driver documentation for information "
            "how to build it.\n\n" "Click Cancel to exit."),
         QMessageBox.Cancel)
             
      return False
         
   query = QSqlQuery()
     
   query.exec_("""create table items (ID INTEGER PRIMARY KEY  AUTOINCREMENT,
                NAME           TEXT,
                Quantity       INT     NOT NULL,
                Price          DOUBLE  NOT NULL,
                Sell_Price     DOUBLE  NOT NULL,
                Description    TEXT,
                Category       TEXT,
                Location       TEXT,
                Length_Ft      INT,
                Barcode        INT,
                Image          BLOB,
                Date Updated   datetime default current_timestamp)""")
         
   query.exec_("insert into items values(0, 'MG996R ', '10', '5', '6', 'A Servo', 'Servos', 'S-1', '', '', '', '' )")
   query.exec_("insert into items values(1, 'MG997R ', '12', '6,45', '6,88', 'A Servo', 'Servos', 'S-1', '', '', '', '' )")
 
   return True
     
if __name__ == '__main__':
   import sys
   app = QApplication(sys.argv)
   createDB()
use it, changes are immediately transferred to the database.

from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtWidgets import (QApplication, QMainWindow, QDialog, QTableView, 
                                QGridLayout, QPushButton, QWidget)
###################################
btnWidth = 100
class MyWindow(QMainWindow):
    def __init__(self, fileName, parent=None):
        super(MyWindow, self).__init__(parent)
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName('inventory2.db')
        self.model = QSqlTableModel()
        self.delrow = -1
        self.initializeModel()

        self.sbar = self.statusBar()
        
        self.viewer = QTableView()
        self.viewer.setModel(self.model)
        self.viewer.clicked.connect(self.findrow)
        self.viewer.selectionModel().selectionChanged.connect(self.getCellText)
        
        self.dlg = QDialog()
        self.layout = QGridLayout()
        self.layout.addWidget(self.viewer,0, 0, 1, 3)
        
        button = QPushButton("add a row")
        button.setFixedWidth(btnWidth)
        button.clicked.connect(self.addrow)
        self.layout.addWidget(button, 1, 0)
        
        btn1 = QPushButton("delete a row")
        btn1.setFixedWidth(btnWidth)
        btn1.clicked.connect(self.delete_row)
        self.layout.addWidget(btn1,1, 1)

        self.myWidget = QWidget()
        self.myWidget.setLayout(self.layout)
  
        self.setCentralWidget(self.myWidget)
        self.setGeometry(0,0,800,550)
        self.setWindowTitle("Database Demo")
        self.sbar.showMessage("Ready")

    def initializeModel(self):
       self.model.setTable('items')
       self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
       self.model.select()
       #self.model.setHeaderData(0, Qt.Horizontal, "Index")
       #self.model.setHeaderData(1, Qt.Horizontal, "Name")
       #self.model.setHeaderData(2, Qt.Horizontal, "Quantity")
       #self.model.setHeaderData(3, Qt.Horizontal, "Price")
       #self.model.setHeaderData(4, Qt.Horizontal, "Sell_Price")
       #self.model.setHeaderData(5, Qt.Horizontal, "Description")
       #self.model.setHeaderData(6, Qt.Horizontal, "Category")
       #self.model.setHeaderData(7, Qt.Horizontal, "Location")
       #self.model.setHeaderData(8, Qt.Horizontal, "Length_Ft ")
       #self.model.setHeaderData(9, Qt.Horizontal, "Barcode ")
       #self.model.setHeaderData(10, Qt.Horizontal, "Image ")
       #self.model.setHeaderData(11, Qt.Horizontal, "Date ")       
        
    def addrow(self):
        print(self.model.rowCount())
        ret = self.model.insertRows(self.model.rowCount(), 1)
        print(ret)
        
    def delete_row(self):
        row = self.viewer.currentIndex().row()
        self.model.removeRow(row)
        self.initializeModel()
        self.viewer.selectRow(row)
        
    def findrow(self, i):
        self.delrow = i.row()

    def getCellText(self):
        if self.viewer.selectedIndexes():
            item = self.viewer.selectedIndexes()[0]
            row = self.selectedRow()
            column = self.selectedColumn()
            if not item == None:
                name = item.data()
                self.sbar.showMessage(str(name))

    def selectedRow(self):
        if self.viewer.selectionModel().hasSelection():
            row =  self.viewer.selectionModel().selectedIndexes()[0].row()
            return int(row)

    def selectedColumn(self):
        column =  self.viewer.selectionModel().selectedIndexes()[0].column()
        return int(column)

###################################     
if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setApplicationName('MyWindow')
    main = MyWindow("")
    main.show()
    sys.exit(app.exec_())
Reply


Messages In This Thread
RE: Multiply a number to a DoubleSpinBox - by Extra - May-22-2022, 05:14 PM
RE: Multiply a number to a DoubleSpinBox - by Extra - May-22-2022, 05:52 PM
RE: Multiply a number to a DoubleSpinBox - by Extra - May-22-2022, 09:27 PM
RE: Multiply a number to a DoubleSpinBox - by Extra - May-22-2022, 09:54 PM
RE: [Solved]Multiply a number to a DoubleSpinBox - by Axel_Erfurt - May-23-2022, 11:47 AM
RE: Multiply a number to a DoubleSpinBox - by Extra - May-23-2022, 01:22 PM

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020