hola amigos mi pregunta es la siguiente hice una app para mostrar unos datos en un QTableView, pero cuando corro el programa me sale el siguiente mensaje: Error al abrir la base de datos Driver not loaded Driver not loaded, aqui les dejo el codigo de mi programa aver que me recominedan o que estoy haceindo mal.
este es el codigo de mi form principal
y este es el codigo de mi form secundario donde quiero ingresar datos
es urgente por favor, gracias de antemano.
nota: adjunto el archivo de la base de datos en formato .sql gracias
este es el codigo de mi form principal
Código:
from PySide2.QtCore import QMetaObject, Qt
from PySide2.QtWidgets import QWidget, QApplication, QSpacerItem, QSizePolicy, QTableView, QPushButton, QVBoxLayout, QHBoxLayout, QStyleFactory, QMessageBox
from PySide2.QtGui import QIcon
from PySide2.QtSql import QSqlDatabase, QSqlTableModel, QSqlError
from dlgAddUser import Ui_dlgAddUser
class Ui_frmPricnipal(QWidget):
def __init__(self):
super().__init__()
self.setupUi()
def setupUi(self):
self.setObjectName("frmPricnipal")
self.resize(363, 242)
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
self.loadData()
self.verticalLayout = QVBoxLayout(self)
self.verticalLayout.setObjectName("verticalLayout")
self.tvLista = QTableView(self)
self.tvLista.setObjectName("tvLista")
self.verticalLayout.addWidget(self.tvLista)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.pbRemove = QPushButton(self)
self.pbRemove.setObjectName("pbRemove")
self.horizontalLayout.addWidget(self.pbRemove)
self.pbAdd = QPushButton(self)
self.pbAdd.setObjectName("pbAdd")
self.pbAdd.clicked.connect(self.openDialog)
self.horizontalLayout.addWidget(self.pbAdd)
self.verticalLayout.addLayout(self.horizontalLayout)
self.retranslateUi()
QMetaObject.connectSlotsByName(self)
def openDialog(self):
dlgNewUser=Ui_dlgAddUser()
dlgNewUser.exec_()
def retranslateUi(self):
self.setWindowTitle(QApplication.translate("frmPricnipal", "Lista de usuarios", None, -1))
self.pbRemove.setText(QApplication.translate("frmPricnipal", "Remove", None, -1))
self.pbAdd.setText(QApplication.translate("frmPricnipal", "Add", None, -1))
def loadData(self):
self.db=QSqlDatabase.addDatabase("QPSQL")
if(not self.db.isDriverAvailable("QPSQL")):
QMessageBox.critical(self,qApp.applicationName(),"Error al cargar el controlador"+self.db.lastError().text())
return
self.db.setPort(5432)
self.db.setDatabaseName("ejemplo")
self.db.setUserName("postgres")
self.db.setPassword("2311046")
if(not self.db.open()):
QMessageBox.critical(self,qApp.applicationName(),"Error al abrir la base de datos"+self.db.lastError().text())
return
model=QSqlTableModel(self)
model.setTable("usuarios")
model.select()
self.tvLista.setModel(model)
if __name__ == "__main__":
import sys
app = QApplication(sys.argv)
app.setWindowIcon(QIcon("img/appIcon.png"))
app.setStyle(QStyleFactory.create("Fusion"))
frmPricnipal = Ui_frmPricnipal()
frmPricnipal.show()
sys.exit(app.exec_())
y este es el codigo de mi form secundario donde quiero ingresar datos
Código:
from PySide2.QtCore import QMetaObject, Qt
from PySide2.QtWidgets import QPushButton, QVBoxLayout, QHBoxLayout, QLineEdit, QGroupBox, QGridLayout, QDialog, QSizePolicy, QSpacerItem, QApplication
class Ui_dlgAddUser(QDialog):
def __init__(self):
super().__init__()
self.setupUi()
def setupUi(self):
self.setObjectName("dlgAddUser")
self.resize(335, 154)
self.setWindowFlags(Qt.MSWindowsFixedSizeDialogHint)
self.gridLayout = QGridLayout(self)
self.gridLayout.setObjectName("gridLayout")
self.groupBox = QGroupBox(self)
self.groupBox.setObjectName("groupBox")
self.verticalLayout = QVBoxLayout(self.groupBox)
self.verticalLayout.setObjectName("verticalLayout")
self.leFullName = QLineEdit(self.groupBox)
self.leFullName.setObjectName("leFullName")
self.verticalLayout.addWidget(self.leFullName)
self.leUsuario = QLineEdit(self.groupBox)
self.leUsuario.setObjectName("leUsuario")
self.verticalLayout.addWidget(self.leUsuario)
self.lePassword = QLineEdit(self.groupBox)
self.lePassword.setObjectName("lePassword")
self.lePassword.setEchoMode(QLineEdit.Password)
self.verticalLayout.addWidget(self.lePassword)
self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 1)
self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
self.horizontalLayout.addItem(spacerItem)
self.pbAddUser = QPushButton(self)
self.pbAddUser.setObjectName("pbAddUser")
self.horizontalLayout.addWidget(self.pbAddUser)
self.pbCancel = QPushButton(self)
self.pbCancel.setObjectName("pbCancel")
self.horizontalLayout.addWidget(self.pbCancel)
self.gridLayout.addLayout(self.horizontalLayout, 1, 0, 1, 1)
self.retranslateUi()
QMetaObject.connectSlotsByName(self)
def retranslateUi(self):
self.setWindowTitle(QApplication.translate("dlgAddUser", "Dialog", None, -1))
self.groupBox.setTitle(QApplication.translate("dlgAddUser", "GroupBox", None, -1))
self.leFullName.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingresar nombre completo", None, -1))
self.leUsuario.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingrese nombre de usuario", None, -1))
self.lePassword.setPlaceholderText(QApplication.translate("dlgAddUser", "Ingrese su clave", None, -1))
self.pbAddUser.setText(QApplication.translate("dlgAddUser", "Add user", None, -1))
self.pbCancel.setText(QApplication.translate("dlgAddUser", "Cancel", None, -1))
es urgente por favor, gracias de antemano.
nota: adjunto el archivo de la base de datos en formato .sql gracias