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
| #!/usr/bin/env python3
# coding: utf-8
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
# L'objet pour gérer mon appli
class myAppli(QApplication):
# Constructeur
def __init__(self, *args, **kwargs):
# Appel méthode objet hérité
super().__init__(*args, **kwargs)
# Le QTabWidget
self.__mainWid=myTabWidget()
# __init__()
# Lancement boucle de traitement des évènements Qt
def exec_(self):
# Affichage du widget principal
self.__mainWid.show()
# Appel méthode objet hérité
return super().exec_()
# exec_()
# class myAppli
# L'objet pour gérer le QTabWidget
class myTabWidget(QTabWidget):
# Constructeur
def __init__(self, *args, **kwargs):
# Appel méthode objet hérité
super().__init__(*args, **kwargs)
# La fenêtre sera détruite à sa fermeture
self.setAttribute(Qt.WA_DeleteOnClose)
# Les widgets à gérer
self.__wid={
mySaisie(parent=self) : ["Saisie 1", False],
mySaisie(parent=self) : ["Saisie 2", False],
mySaisie(parent=self) : ["Saisie 3", False],
}
# Placement des widgets
for (k, v) in self.__wid.items():
self.addTab(k, v[0])
k.sigValid[bool].connect(self.__slotValid)
# for
# __init()
# Le slot qui vérifie la validité de l'ensemble des widgets
@pyqtSlot(bool)
def __slotValid(self, check):
# On positionne le flag selon le widget ayant émis le signal
self.__wid[self.sender()][1]=check
# On affiche l'état du tabwidget selon l'ensemble des états
if not all(v[1] for v in self.__wid.values()):
QMessageBox.warning(
self,
"Etat invalide",
"Encore à compléter...",
)
else:
QMessageBox.information(
self,
"Etat ok",
"Enfin valide!!!",
)
# if
# __slotValid()
# class myTabWidget
# L'objet pour gérer une saisie de nom+prénom
class mySaisie(QWidget):
sigValid=pyqtSignal(bool)
# Constructeur
def __init__(self, *args, **kwargs):
# Appel méthode objet hérité
super().__init__(*args, **kwargs)
# La fenêtre sera détruite à sa fermeture
self.setAttribute(Qt.WA_DeleteOnClose)
# La zone de saisie nom+prénom
self.__nom=QLineEdit(parent=self)
self.__prenom=QLineEdit(parent=self)
# Positionnement des widgets
layout1=QHBoxLayout()
layout1.addWidget(self.__nom, stretch=0)
layout1.addWidget(self.__prenom, stretch=0)
mainLayout=QVBoxLayout(self)
mainLayout.addLayout(layout1, stretch=0)
mainLayout.addStretch(1)
# On active les actions des widgets
self.__nom.textChanged[str].connect(self.__slotChanged)
self.__prenom.textChanged[str].connect(self.__slotChanged)
# __init__()
# Le slot qui traite tout changement
@pyqtSlot(str)
def __slotChanged(self, t):
# Si le nom ou prénom sont vides
if not self.__nom.text() or not self.__prenom.text():
# Le widget est invalide
self.sigValid[bool].emit(False)
return
# if
# Le widget est valide
self.sigValid[bool].emit(True)
# __slotChanged()
# class mySaisie
# Dans le cas d'une exécution directe du script
if __name__ == "__main__":
# L'application principale Qt
sys.exit(myAppli(sys.argv).exec_())
# if |
Partager