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
#1
Hello,

I'm trying to display a different database on my CategoryTableView Widget but I can't seem to get the database to display on it?

This is a snippet of what I have (FYI: UserDatabase = "user.db"):
        #------------------------------------------
        #           Category Display
        #------------------------------------------
        #Connect to Database
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName(UserDatabase)
        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.gridLayout.addWidget(self.CategoryTableView, 4, 1, 1, 2)
        self.setCentralWidget(self.centralwidget)

        self.CategoryTableView.setSelectionBehavior(0)
        # 0 Selecting single items.
        # 1 Selecting only rows.
        # 2 Selecting only columns.

    def initializeModel(self):
       self.model.setTable('items')
       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)
Am I doing it right? what am I missing?

Thanks in advance.

This is my 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)

from Constants import MainDatabase, UserDatabase

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 = QtWidgets.QWidget()
        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)

    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]
        self.DataBaseComboBox.addItems(Databases)

        #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]

        #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')
    #------------------------------------------

        #------------------------------------------
        #           Category Display
        #------------------------------------------
        #Connect to Database
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName(UserDatabase)
        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.gridLayout.addWidget(self.CategoryTableView, 4, 1, 1, 2)
        self.setCentralWidget(self.centralwidget)

        self.CategoryTableView.setSelectionBehavior(0)
        # 0 Selecting single items.
        # 1 Selecting only rows.
        # 2 Selecting only columns.

    def initializeModel(self):
       self.model.setTable('items')
       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)
#----------------------------------------------------------------------------------------------------


#----------------------------------------------------------------------------------------------------
#                                       Run this Program
#----------------------------------------------------------------------------------------------------
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    ui = Ui_SettingsScreen()
    ui.show()
    sys.exit(app.exec_())
#----------------------------------------------------------------------------------------------------
Reply
#2
There's no point in posting full code that won't run without the other modules.
Reply
#3
(Jun-24-2022, 06:06 PM)Axel_Erfurt Wrote: There's no point in posting full code that won't run without the other modules.

Ok, I'll keep that in mind for next time.

Now I'm just trying to display a database with 3 columns (ID, Category, Value)
Any suggestions on how to get it displayed on the GUI?
Reply
#4
If the database has more columns, you can hide the columns you don't need.

for example hide column 1

self.table.hideColumn(1)
Reply
#5
Thanks.
But for some reason nothing displays on the Table widget and I don't know why? All I get is a white/blank area no column header or information. It's just blank (and yes there is info in the database, but it's not showing for some reason)

Any suggestions?

Thanks.

Attached Files

Thumbnail(s)
   
Reply
#6
I think the database (or table) is not loaded at all.
The error may be somewhere in Constants, but only you know the content.

A simple test to load the db

from PyQt5.QtWidgets import QMainWindow, QApplication, QTableView
from PyQt5.QtSql import QSqlDatabase, QSqlTableModel


class TableTest(QMainWindow):
    def __init__(self, parent = None):
        super(TableTest, self).__init__(parent)
        
        self.db = QSqlDatabase.addDatabase('QSQLITE')
        self.db.setDatabaseName("inventory.db")
        self.model = QSqlTableModel()
     
        self.CategoryTableView = QTableView()
        self.CategoryTableView.setModel(self.model)
        self.setCentralWidget(self.CategoryTableView)
     
        self.model.setTable('items')
        self.model.select()   
        self.show()     

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    ui = TableTest()
    sys.exit(app.exec_())
Reply
#7
So if I run Settings.py I can see the table, but that's it. None of the other content is there.
Why is that?
(I have attached some screenshots below. Screenshot 1 shows what is curretnly displayed & Screenshot 2 shows what should be displayed, with the expection of the table because that should be showing in the whitebox (QTableView) below the Category List Label)

The problem should not be in my Constants.py but here it is in case you want to take a look at it:
#----------------------------------------------------------------------------------------------------
#                                                   Constants
#----------------------------------------------------------------------------------------------------

#--------------------------------------------------
#-------------Not Editable in Settings-------------
#--------------------------------------------------
#       Markup Value/Factor for Sell Price
#--------------------------------------------------
#Markup Values:
#0-$49.99         50%
#$50-149.99       45%
#$150-999.99      35%
#$1,000-1,999.99  30%
#$2,000-2,999.99  20%
#$3,000-3,999.99  15%
#$4,000 or Higher 10%    
#Located in calculate_sellprice() in AdminMenu.py     
#--------------------------------------------------

#--------------------------------------------------
#      Values for the Category Drop down List
#--------------------------------------------------
CategoryList = ['N/A','Ballast','Boxes','Breakers',
                'Bulbs','Panels/Disconnects','Pipes',
                'Small Parts', 'Wire', 'Other']           
#--------------------------------------------------

#--------------------------------------------------
#               Databases
#--------------------------------------------------
MainDatabase = "inventory.db"       #Table Name: 'Items'
UserDatabase = "users.db"           #Table Name: 'Users'
CategoryDatabase = "categories.db"  #Table Name: 'Categories'
#--------------------------------------------------


#--------------------------------------------------
#-------------Not Editable in Settings-------------
#--------------------------------------------------
#       Max Value for Quantity, Price & Length
#--------------------------------------------------
MaxValue = 2147483647
#--------------------------------------------------
Why won't the table load/show in the CategoryTableView Widget and where did all the other content go?

The code right now:
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

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 = QtWidgets.QWidget()
        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("categories.db")
        self.model = QSqlTableModel()

        self.CategoryTableView = QTableView()
        self.CategoryTableView.setModel(self.model)
        self.setCentralWidget(self.CategoryTableView)
        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.CategoryTableView.setSelectionBehavior(0)
        # 0 Selecting single items.
        # 1 Selecting only rows.
        # 2 Selecting only columns.

    def initializeModel(self):
       self.model.setTable('categories') #Set to Table Name
       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]
        self.DataBaseComboBox.addItems(Databases)

        #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_())
#----------------------------------------------------------------------------------------------------

Attached Files

Thumbnail(s)
       
Reply
#8
Why do you use a database for categories? Do you change them often?
Reply
#9
(Jun-27-2022, 03:55 PM)Axel_Erfurt Wrote: Why do you use a database for categories? Do you change them often?

Yes I do change the often and I need them to be stored(not reset) even if you kill the program and reopen it.
I tired storing all my categories in a list but whenever I closed the program and re-opened it, they would all reset.

Plus I plan on having an associated low quantity value for each category, so I figured a database would be easier to store/retrieve all that info.
Reply
#10
So I got the database to display but not in the area that I want it.

How can I fix this?

Thanks in advance.

What I have right now:
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)

        #Coordinates should be:9,234
        self.formLayout.addWidget(self.CategoryTableView)
        self.setCentralWidget(self.centralwidget)

        #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
                #Make the main display, display the categories 

        #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_())
#----------------------------------------------------------------------------------------------------

Attached Files

Thumbnail(s)
   
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  [PyQt] [Solved]Help displaying SQLite Database Extra 9 2,742 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