4 pièce(s) jointe(s)
PyQt5 - Blocage pour créer une page à la suite d'un évènement
Bonjour à tous,
Je fais appel à votre aide car j'ai un blocage...
Je suis en train de programmer une sorte de LMS où le but est que l'utilisateur saisisse des écritures comptables et soient évalués sur la saisie de celles-ci (ça reste booléen, soit l'écriture est complément correcte et attribue +1 points, soit l'écriture est fausse).
J'ai donc choisi la librairie PyQt5 pour faire le menu d'accueil où il peut s'enregistrer (les données sont conservées dans une table SQLite) et s'authentifier (les mêmes données enregistrées lors de l'authentification sont interrogées), jusque là pas de problèmes.
Ensuite j'ai créée une classe et un attribut relatif à l'écran de l'exercice (créée à l'aide de QtDesigner), c'est à dire la fenêtre de l'énoncé de l'exercice, les widgets ainsi que le tableau où devront être saisies les écritures en faisant appel au bons comptes et entrer les bons montants au débit ou au crédit.
Là où je bloque c'est pour faire apparaitre cet écran à la suite de l'authentification réussie. Je souhaiterai qu'une fois que l'identifiant et le mot de passe saisies soient corrects, apparaisse, sans créer une fenêtre supplémentaire, l'écran relatif à l'exercice.
Je vous met le code ci-dessous et les copies d'écrans des screens qui sont appelés au cours de l'exécution du programme :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
| import sys
from PyQt5.uic import loadUi
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QDialog, QApplication, QWidget
import sqlite3
class WelcomeScreen(QDialog):
def __init__(self):
super(WelcomeScreen, self).__init__()
loadUi("welcomescreen.ui", self)
self.login.clicked.connect(self.gotologin)
self.create.clicked.connect(self.gotocreate)
def gotologin(self):
login = LoginScreen()
widget.addWidget(login)
widget.setCurrentIndex(widget.currentIndex()+1)
def gotocreate(self):
create = CreateAccScreen()
widget.addWidget(create)
widget.setCurrentIndex(widget.currentIndex() + 1)
class LoginScreen(QDialog):
def __init__(self):
super(LoginScreen, self).__init__()
loadUi("login.ui", self)
self.passwordfield.setEchoMode(QtWidgets.QLineEdit.Password)
self.login.clicked.connect(self.loginfunction)
def loginfunction(self):
user = self.usernamefield.text()
password = self.passwordfield.text()
bookkeeping = BookKeepingScreen()
def gotobookkeeping(self):
BookKeepingScreen = BookKeepingScreen()
widget.addWidget(BookKeepingScreen)
widget.setCurrentIndex(widget.currentIndex() + 1)
if len(user)==0 or len(password)==0:
self.error.setText("Veuillez remplir tous les champs")
else :
conn = sqlite3.connect("logindata.db")
cur = conn.cursor()
query = 'SELECT password FROM login_info WHERE username =\''+user+"\'"
cur.execute(query)
result_pass = cur.fetchone()[0]
if result_pass == password:
print("Authentification réussie !")
self.error.setText("")
self.bookkeeping.connect(self.gotobookkeeping)
else :
self.error.setText("nom d'utilisateur ou mot de passe invalide...")
class BookKeepingScreen(QDialog):
def __init__(self):
super(BookKeepingScreen, self).__init__()
loadUi("bookkeeping.ui", self)
def BookKeepingfunction(self):
def loginfunction(self):
compte = self.case_compte_1.text()
libelle = self.case_libelle_1.text()
debit = self.case_debit_1.text()
credit = self.case_credit_1.text()
if len(compte)==401:
self.error.setText("Ce n'est pas le bon compte")
else :
conn = sqlite3.connect("logindata.db")
cur = conn.cursor()
query = 'SELECT libelle FROM pcg WHERE compte = "401"'
cur.execute(query)
result_validation = cur.fetchone()[0]
if result_validation == compte:
print("+1")
conn = sqlite3.connect("logindata.db")
cur = conn.cursor()
user_info = [user, info, level]
cur.execute('INSERT INTO login_info (username, password, level) VALUES (+1)', user_info)
conn.commit()
conn.close()
class CreateAccScreen(QDialog):
def __init__(self):
super(CreateAccScreen, self).__init__()
loadUi("createacc.ui", self)
self.passwordfield.setEchoMode(QtWidgets.QLineEdit.Password)
self.confirmpasswordfield.setEchoMode(QtWidgets.QLineEdit.Password)
self.senregistrerButton.clicked.connect(self.senregistrerButtonfunction)
def senregistrerButtonfunction(self):
user = self.usernamefield.text()
password = self.passwordfield.text()
confirmpassword = self.confirmpasswordfield.text()
if len(user)==0 or len(password)==0 or len(confirmpassword)==0:
self.error.setText("Veuillez remplir tous les champs")
elif password!=confirmpassword:
self.error.setText("Les mots de passes ne correspondent pas")
else :
conn = sqlite3.connect("logindata.db")
cur = conn.cursor()
user_info = [user, password]
cur.execute('INSERT INTO login_info (username, password) VALUES (?,?)', user_info)
conn.commit()
conn.close()
app = QApplication(sys.argv)
welcome = WelcomeScreen()
widget = QtWidgets.QStackedWidget()
widget.addWidget(welcome)
widget.setFixedHeight(800)
widget.setFixedHeight(1200)
widget.show()
try:
sys.exit(app.exec_())
except:
print("Exiting") |
Pièce jointe 607832Pièce jointe 607833Pièce jointe 607834Pièce jointe 607835
Je pense qu'il y a quelque chose que je fais mal mais j'ai beau relire les cours que j'ai sur PyQt, je n'y arrive pas. Je vous remercie pour votre aide et vos explications :)