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"):
Thanks in advance.
This is my full code:
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_())
#----------------------------------------------------------------------------------------------------
