Python Forum
[PyQt] [Solved]Help displaying a table with QSqlTableModel
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyQt] [Solved]Help displaying a table with QSqlTableModel
#11
Never mind I got it.

I just commented out:
 # self.CategoryTableView = QtWidgets.QTableView(self.centralwidget)
        # self.CategoryTableView.setStyleSheet("background-color: rgb(255, 255, 255);")
        # self.CategoryTableView.setObjectName("CategoryTableView")
        # self.formLayout.setWidget(13, QtWidgets.QFormLayout.LabelRole, self.CategoryTableView)
And moved the table to the coordinates:
self.formLayout.setWidget(14,0, self.CategoryTableView)
Full code:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox


import sys
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel
from PyQt5.QtWidgets import QMessageBox, QTableView, QWidget

from Constants import MainDatabase, UserDatabase, CategoryDatabase

class Ui_SettingsScreen(QtWidgets.QMainWindow):
    def __init__(self, parent = None):
        super(Ui_SettingsScreen, self).__init__(parent)
        self.setObjectName("MainWindow")
        self.setFixedSize(942, 841)
        self.setStyleSheet("background-color: rgb(0, 170, 255);")
        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName("centralwidget")
        self.formLayout = QtWidgets.QFormLayout(self.centralwidget)
        self.formLayout.setObjectName("formLayout")
        self.SettingsLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.SettingsLabel.setFont(font)
        self.SettingsLabel.setStyleSheet("background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 15px;\n"
"border-color: black;\n"
"padding: 4px;")
        self.SettingsLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.SettingsLabel.setObjectName("SettingsLabel")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.SpanningRole, self.SettingsLabel)
        spacerItem = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.formLayout.setItem(1, QtWidgets.QFormLayout.LabelRole, spacerItem)
        self.DataBaseLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setItalic(False)
        font.setWeight(75)
        self.DataBaseLabel.setFont(font)
        self.DataBaseLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.DataBaseLabel.setObjectName("DataBaseLabel")
        self.formLayout.setWidget(5, QtWidgets.QFormLayout.LabelRole, self.DataBaseLabel)
        self.DataBaseComboBox = QtWidgets.QComboBox(self.centralwidget)
        self.DataBaseComboBox.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.DataBaseComboBox.setObjectName("DataBaseComboBox")
        self.formLayout.setWidget(7, QtWidgets.QFormLayout.LabelRole, self.DataBaseComboBox)
        self.LowQuantityLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.LowQuantityLabel.setFont(font)
        self.LowQuantityLabel.setObjectName("LowQuantityLabel")
        self.formLayout.setWidget(8, QtWidgets.QFormLayout.LabelRole, self.LowQuantityLabel)
        self.LowQuantitySpinBox = QtWidgets.QSpinBox(self.centralwidget)
        self.LowQuantitySpinBox.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.LowQuantitySpinBox.setObjectName("LowQuantitySpinBox")
        self.formLayout.setWidget(9, QtWidgets.QFormLayout.LabelRole, self.LowQuantitySpinBox)
        self.LowQuantityCategoryComboBox = QtWidgets.QComboBox(self.centralwidget)
        self.LowQuantityCategoryComboBox.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.LowQuantityCategoryComboBox.setObjectName("LowQuantityCategoryComboBox")
        self.formLayout.setWidget(10, QtWidgets.QFormLayout.LabelRole, self.LowQuantityCategoryComboBox)
        self.CategoryListLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.CategoryListLabel.setFont(font)
        self.CategoryListLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.CategoryListLabel.setObjectName("CategoryListLabel")
        self.formLayout.setWidget(12, QtWidgets.QFormLayout.LabelRole, self.CategoryListLabel)
        # self.CategoryTableView = QtWidgets.QTableView(self.centralwidget)
        # self.CategoryTableView.setStyleSheet("background-color: rgb(255, 255, 255);")
        # self.CategoryTableView.setObjectName("CategoryTableView")
        # self.formLayout.setWidget(13, QtWidgets.QFormLayout.LabelRole, self.CategoryTableView)
        self.SaveButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.SaveButton.setFont(font)
        self.SaveButton.setStyleSheet("background-color: rgb(225, 225, 225);\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-color: black;\n"
"padding: 4px;")
        self.SaveButton.setObjectName("SaveButton")
        self.formLayout.setWidget(15, QtWidgets.QFormLayout.LabelRole, self.SaveButton)
        spacerItem1 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.formLayout.setItem(16, QtWidgets.QFormLayout.LabelRole, spacerItem1)
        self.RegisterUserLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setUnderline(False)
        font.setWeight(75)
        font.setStrikeOut(False)
        self.RegisterUserLabel.setFont(font)
        self.RegisterUserLabel.setStyleSheet("background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 15px;\n"
"border-color: black;\n"
"padding: 4px;\n"
"")
        self.RegisterUserLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.RegisterUserLabel.setObjectName("RegisterUserLabel")
        self.formLayout.setWidget(18, QtWidgets.QFormLayout.SpanningRole, self.RegisterUserLabel)
        spacerItem2 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.formLayout.setItem(19, QtWidgets.QFormLayout.LabelRole, spacerItem2)
        self.NameLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.NameLabel.setFont(font)
        self.NameLabel.setObjectName("NameLabel")
        self.formLayout.setWidget(20, QtWidgets.QFormLayout.LabelRole, self.NameLabel)
        self.NameInput = QtWidgets.QLineEdit(self.centralwidget)
        self.NameInput.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.NameInput.setObjectName("NameInput")
        self.formLayout.setWidget(21, QtWidgets.QFormLayout.LabelRole, self.NameInput)
        self.PasswordLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.PasswordLabel.setFont(font)
        self.PasswordLabel.setObjectName("PasswordLabel")
        self.formLayout.setWidget(22, QtWidgets.QFormLayout.LabelRole, self.PasswordLabel)
        self.PasswordInput = QtWidgets.QLineEdit(self.centralwidget)
        self.PasswordInput.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.PasswordInput.setObjectName("PasswordInput")
        self.formLayout.setWidget(23, QtWidgets.QFormLayout.LabelRole, self.PasswordInput)
        self.PrivilegeLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.PrivilegeLabel.setFont(font)
        self.PrivilegeLabel.setObjectName("PrivilegeLabel")
        self.formLayout.setWidget(24, QtWidgets.QFormLayout.LabelRole, self.PrivilegeLabel)
        self.PrivilegeComboBox = QtWidgets.QComboBox(self.centralwidget)
        self.PrivilegeComboBox.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.PrivilegeComboBox.setObjectName("PrivilegeComboBox")
        self.formLayout.setWidget(25, QtWidgets.QFormLayout.LabelRole, self.PrivilegeComboBox)
        self.SubmitUserButton = QtWidgets.QPushButton(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.SubmitUserButton.setFont(font)
        self.SubmitUserButton.setStyleSheet("background-color: rgb(225, 225, 225);\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-color: black;\n"
"padding: 4px;")
        self.SubmitUserButton.setObjectName("SubmitUserButton")
        self.formLayout.setWidget(26, QtWidgets.QFormLayout.LabelRole, self.SubmitUserButton)
        spacerItem3 = QtWidgets.QSpacerItem(20, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.formLayout.setItem(27, QtWidgets.QFormLayout.LabelRole, spacerItem3)
        self.MoreInfoLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(15)
        font.setBold(True)
        font.setWeight(75)
        self.MoreInfoLabel.setFont(font)
        self.MoreInfoLabel.setStyleSheet("background-color: rgb(0, 0, 0);\n"
"color: rgb(255, 255, 255);\n"
"\n"
"border-style: outset;\n"
"border-width: 2px;\n"
"border-radius: 15px;\n"
"border-color: black;\n"
"padding: 4px;\n"
"")
        self.MoreInfoLabel.setAlignment(QtCore.Qt.AlignCenter)
        self.MoreInfoLabel.setObjectName("MoreInfoLabel")
        self.formLayout.setWidget(28, QtWidgets.QFormLayout.SpanningRole, self.MoreInfoLabel)
        self.TotalValueLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.TotalValueLabel.setFont(font)
        self.TotalValueLabel.setObjectName("TotalValueLabel")
        self.formLayout.setWidget(29, QtWidgets.QFormLayout.LabelRole, self.TotalValueLabel)
        self.TotalValueResultLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.TotalValueResultLabel.setFont(font)
        self.TotalValueResultLabel.setStyleSheet("color: rgb(0, 150, 0);")
        self.TotalValueResultLabel.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.TotalValueResultLabel.setObjectName("TotalValueResultLabel")
        self.formLayout.setWidget(29, QtWidgets.QFormLayout.FieldRole, self.TotalValueResultLabel)
        self.InfoLabel2 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setItalic(True)
        self.InfoLabel2.setFont(font)
        self.InfoLabel2.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter)
        self.InfoLabel2.setObjectName("InfoLabel2")
        self.formLayout.setWidget(30, QtWidgets.QFormLayout.LabelRole, self.InfoLabel2)
        spacerItem4 = QtWidgets.QSpacerItem(20, 10, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.formLayout.setItem(31, QtWidgets.QFormLayout.LabelRole, spacerItem4)
        self.TotalValueMarkUpLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.TotalValueMarkUpLabel.setFont(font)
        self.TotalValueMarkUpLabel.setObjectName("TotalValueMarkUpLabel")
        self.formLayout.setWidget(32, QtWidgets.QFormLayout.LabelRole, self.TotalValueMarkUpLabel)
        self.TotalValueMarkUpResultLabel = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        self.TotalValueMarkUpResultLabel.setFont(font)
        self.TotalValueMarkUpResultLabel.setStyleSheet("color: rgb(0, 255, 0);")
        self.TotalValueMarkUpResultLabel.setObjectName("TotalValueMarkUpResultLabel")
        self.formLayout.setWidget(32, QtWidgets.QFormLayout.FieldRole, self.TotalValueMarkUpResultLabel)
        self.InfoLabel3 = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setItalic(True)
        self.InfoLabel3.setFont(font)
        self.InfoLabel3.setObjectName("InfoLabel3")
        self.formLayout.setWidget(33, QtWidgets.QFormLayout.LabelRole, self.InfoLabel3)
        self.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar()
        self.statusbar.setObjectName("statusbar")
        self.setStatusBar(self.statusbar)

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

        
        #------------------------------------------
        #         Category Database Display
        #------------------------------------------
        #Connect to Database
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName(CategoryDatabase)
        self.model = QSqlTableModel()
        self.delrow = -1
        self.initializeModel()

        self.sbar = self.statusBar()

        self.CategoryTableView = QTableView()
        self.CategoryTableView.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.CategoryTableView.setModel(self.model)
        self.CategoryTableView.clicked.connect(self.findrow)
        self.CategoryTableView.selectionModel().selectionChanged.connect(self.getCellText)

        self.formLayout.setWidget(14,0, self.CategoryTableView)

        #Only selects rows (Can still edit cells by double-clicking)
        self.CategoryTableView.setSelectionBehavior(1)
        # 0 Selecting single items.
        # 1 Selecting only rows.
        # 2 Selecting only columns.

    def initializeModel(self):
       self.model.setTable('Categories')
       self.model.setEditStrategy(QSqlTableModel.OnFieldChange)
       self.model.select()   

    def findrow(self, i):
        self.delrow = i.row()

    def getCellText(self):
        if self.CategoryTableView.selectedIndexes():
            model = self.CategoryTableView.model()
            row = self.selectedRow()
            column = 1 #Get item name (column 1)
            name = model.data(model.index(row, column))
            #Shows the item name on the bottom left corner of the screen
            self.sbar.showMessage(str(name))
                        
            #Get the item Name from the currently selected row
            global SelectedItemName
            SelectedItemName = model.data(model.index(row, column))
 
    def selectedRow(self):
        if self.CategoryTableView.selectionModel().hasSelection():
            row =  self.CategoryTableView.selectionModel().selectedIndexes()[0].row()
            return int(row)
 
    def selectedColumn(self):
        column =  self.CategoryTableView.selectionModel().selectedIndexes()[0].column()
        return int(column)

        #------------------------------------------

    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("MainWindow", "Settings"))
        self.SettingsLabel.setText(_translate("MainWindow", "Settings"))
        self.DataBaseLabel.setText(_translate("MainWindow", "Database"))
        self.LowQuantityLabel.setText(_translate("MainWindow", "Low Quantity Value"))
        self.CategoryListLabel.setText(_translate("MainWindow", "Category List"))
        self.SaveButton.setText(_translate("MainWindow", "Save"))
        self.RegisterUserLabel.setText(_translate("MainWindow", "Register New User"))
        self.NameLabel.setText(_translate("MainWindow", "Name:"))
        self.PasswordLabel.setText(_translate("MainWindow", "Password:"))
        self.PrivilegeLabel.setText(_translate("MainWindow", "Privilege:"))
        self.SubmitUserButton.setText(_translate("MainWindow", "Submit User"))
        self.MoreInfoLabel.setText(_translate("MainWindow", "More Info"))
        self.TotalValueLabel.setText(_translate("MainWindow", "Total Inventory Value Without Markup:"))
        self.TotalValueResultLabel.setText(_translate("MainWindow", "$  "))
        self.InfoLabel2.setText(_translate("MainWindow", "(Quantity*Price)"))
        self.TotalValueMarkUpLabel.setText(_translate("MainWindow", "Total Inventory Value With Markup:"))
        self.TotalValueMarkUpResultLabel.setText(_translate("MainWindow", "$ "))
        self.InfoLabel3.setText(_translate("MainWindow", "(Quantity*SellPrice)"))

#----------------------------------------------------------------------------------------------------
        #------------------------------------------
        #             Database Dropdown
        #------------------------------------------
        #Choose a database to access
        Databases = [MainDatabase, CategoryDatabase, UserDatabase]
        self.DataBaseComboBox.addItems(Databases)

        SelectedDatabase = self.DataBaseComboBox.currentText()
        if SelectedDatabase == CategoryDatabase:
                x = 2

        #Not Yet Tested With Multiple Databases 
        # SelectedDatabase = self.DataBaseComboBox.currentText()
        # SelectedDatabase = MainDatabase
        #------------------------------------------

        #------------------------------------------
        #           Register New User
        #------------------------------------------
        #Define Privilege Levels
        PrivilegeList = ['Admin','Standard']
        self.PrivilegeComboBox.addItems(PrivilegeList)

        #When the Submit User button is clicked -> SubmitUserClicked Function
        SubmitUserButton = self.SubmitUserButton
        SubmitUserButton.clicked.connect(self.SubmitUserClicked)
    #----------------------------------
    #   Submit User Clicked Function
    #----------------------------------
    def SubmitUserClicked(self):
        #Store the inputted values
        userInputName = self.NameInput.text()
        userInputPassword = self.PasswordInput.text()
        userInputPrivilege = self.PrivilegeComboBox.currentText()
        myList = [userInputName, userInputPassword, userInputPrivilege]

        if userInputName == "":
                self.NameLabel.setStyleSheet("color: rgb(255,0,0);")
                self.PasswordLabel.setStyleSheet("color: rgb(0,0,0);")

        elif userInputPassword == "":
                self.PasswordLabel.setStyleSheet("color: rgb(255,0,0);")
                self.NameLabel.setStyleSheet("color: rgb(0,0,0);")

        else:
                #Add the user to the users database
                import sqlite3
                connection = sqlite3.connect(UserDatabase)
                cursor = connection.cursor()
                cursor = connection.cursor()
                cursor.execute('''
                insert into Users (Name, Password, Privilege)
                values (?,?,?)
                ''', myList)
                connection.commit()
                connection.close()

                #Call User Added Popup
                self.UserAdded()
                
                #Clear the inputs
                self.NameInput.clear()
                self.PasswordInput.clear()
    #----------------------------------
    #       User Added Popup
    #----------------------------------
    def UserAdded(self):
        msgBox = QMessageBox()
        msgBox.setIcon(QMessageBox.Information)
        msgBox.setText("The user was successfully added to the database")
        msgBox.setWindowTitle("User Added")
        msgBox.setStandardButtons(QMessageBox.Ok)
        returnValue = msgBox.exec()
        if returnValue == QMessageBox.Ok:
            print('The Ok button was clicked')
    #------------------------------------------
#----------------------------------------------------------------------------------------------------


#----------------------------------------------------------------------------------------------------
#                                       Run this Program
#----------------------------------------------------------------------------------------------------
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = Ui_SettingsScreen()
    ui.show()
    sys.exit(app.exec_())
#----------------------------------------------------------------------------------------------------
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyQt] [Solved]Help displaying SQLite Database Extra 9 2,748 May-21-2022, 08:03 PM
Last Post: Extra

Forum Jump:

User Panel Messages

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