![]() |
[PyQt] [Solved]Help displaying a table with QSqlTableModel - Printable Version +- Python Forum (https://python-forum.io) +-- Forum: Python Coding (https://python-forum.io/forum-7.html) +--- Forum: GUI (https://python-forum.io/forum-10.html) +--- Thread: [PyQt] [Solved]Help displaying a table with QSqlTableModel (/thread-37554.html) Pages:
1
2
|
[Solved]Help displaying a table with QSqlTableModel - Extra - Jun-24-2022 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_()) #---------------------------------------------------------------------------------------------------- RE: Help displaying a table with QSqlTableModel - Axel_Erfurt - Jun-24-2022 There's no point in posting full code that won't run without the other modules. RE: Help displaying a table with QSqlTableModel - Extra - Jun-24-2022 (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? RE: Help displaying a table with QSqlTableModel - Axel_Erfurt - Jun-24-2022 If the database has more columns, you can hide the columns you don't need. for example hide column 1 self.table.hideColumn(1)
RE: Help displaying a table with QSqlTableModel - Extra - Jun-25-2022 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. RE: Help displaying a table with QSqlTableModel - Axel_Erfurt - Jun-26-2022 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_()) RE: Help displaying a table with QSqlTableModel - Extra - Jun-26-2022 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_()) #---------------------------------------------------------------------------------------------------- RE: Help displaying a table with QSqlTableModel - Axel_Erfurt - Jun-27-2022 Why do you use a database for categories? Do you change them often? RE: Help displaying a table with QSqlTableModel - Extra - Jun-28-2022 (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. RE: Help displaying a table with QSqlTableModel - Extra - Jun-29-2022 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_()) #---------------------------------------------------------------------------------------------------- |