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
| #!/usr/bin/python
# -*- coding: utf-8 -*-
from __future__ import division
# python 2.7
import sys
from PyQt4 import QtCore, QtGui
#############################################################################
class Login(QtGui.QWidget):
finlogin = QtCore.pyqtSignal(list) # création d'un nouveau signal
#========================================================================
def __init__(self, parent=None):
super(Login, self).__init__(parent)
self.setWindowTitle(u"Login:")
self.nom = QtGui.QLineEdit(self)
self.nom.setText(u"identifiant?")
self.nom.returnPressed.connect(self.close)
self.mdp = QtGui.QLineEdit(self)
self.mdp.setText(u"mot de passe?")
self.mdp.setEchoMode(QtGui.QLineEdit.Password) # ne pas afficher le mot de passe
self.mdp.returnPressed.connect(self.close)
self.bouton = QtGui.QPushButton('Login', self)
self.bouton.clicked.connect(self.close)
posit = QtGui.QGridLayout()
posit.addWidget(self.nom, 0, 0)
posit.addWidget(self.mdp, 1, 0)
posit.addWidget(self.bouton, 2, 0)
self.setLayout(posit)
self.nom.setFocus()
self.nom.selectAll()
def closeEvent(self, event):
"""exécuté à chaque fermeture de la fenêtre"""
# préparation de la réponse rep
rep = [unicode(self.nom.text()), unicode(self.mdp.text())]
# envoi du signal "finlogin" avec le couple [nom, motdepasse]
self.finlogin.emit(rep)
# acceptation de la fermeture de la fenêtre
event.accept()
#############################################################################
class Principal(QtGui.QMainWindow):
#========================================================================
def __init__(self, parent=None):
"""Initialise la fenêtre"""
super(Principal, self).__init__(parent)
# mettre un fond (nécessaire avec un QMainWindow)
self.setCentralWidget(QtGui.QFrame())
# créer un bouton qui ne fait rien ici
self.bouton = QtGui.QPushButton(u"Bouton bidon", self.centralWidget())
# positionner sur le fond de la fenêtre
posit = QtGui.QGridLayout()
posit.addWidget(self.bouton, 0, 0)
self.centralWidget().setLayout(posit)
# appeler la petite fenêtre de login
self.login = Login()
# préparer à recevoir le signal de fin de login, et si oui,
# lancer la méthode veriflogin
self.login.finlogin.connect(self.veriflogin)
self.login.show()
#========================================================================
def veriflogin(self, rep):
# base de données des logins enregistrés
self.login = {"toto":"mdptoto", "titi":"mdptiti", "tata":"mdptata"}
if rep[0] in self.login and self.login[rep[0]]==rep[1]:
self.show() # affichage de la fenêtre principale
else:
QtGui.QMessageBox.critical(self,
u"Login",
u"Désolé, mauvais identifiant ou mauvais mot de passe")
self.close()
#############################################################################
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
main = Principal()
# pas de main.show() ici!
sys.exit(app.exec_()) |