choixEleves.py
Aller à la documentation de ce fichier.
#!/usr/bin/python
licence={}
licence['en']="""
file choixEleves.py
this file is part of the project scolasync
Copyright (C) 2012 Georges Khaznadar <georgesk@ofset.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
"""
import gestClasse
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from Ui_choixEleves import Ui_Dialog
import db
import sys, os.path
# implémente un dialogue permettant de choisir des élèves
# les propriétés importantes sont self.ok, vrai si on doit prendre en
# compte la liste sélectionnée, et le contenu de la liste des sélectionnés,
# dont on peut récupérer les élèves un par un à l'aide de self.pop()
#
class choixElevesDialog(QDialog):
# le constructeur
# récupérer des données SCONET
# @param parent le widget parent
# @param gestionnaire le système censé gérer les données du fichier f
#
def __init__(self, parent=None, gestionnaire=gestClasse.Sconet):
QDialog.__init__(self, parent=parent)
self.ok=None
self.ui=Ui_Dialog()
self.ui.setupUi(self)
self.prefs=db.readPrefs()
self.gestionnaire=gestionnaire
self.connecteGestionnaire()
self.ui.listWidget.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.ui.listWidget.setSortingEnabled(True)
self.ui.checkBoxNumero.setChecked(True)
self.ui.spinBoxNumero.setValue(1)
self.ui.spinBoxNumero.setEnabled(True)
self.ui.pushButtonFile.clicked.connect(self.fichierEleves)
self.ui.pushButton_replierArbre.clicked.connect(self.replie)
self.ui.pushButton_cocher.clicked.connect(self.coche)
self.ui.pushButton_decocher.clicked.connect(self.decoche)
self.ui.pushButton_addToList.clicked.connect(self.addToList)
self.ui.pushButton_delInList.clicked.connect(self.delInList)
self.ui.pushButton_OK.clicked.connect(self.valid)
self.ui.pushButton_Esc.clicked.connect(self.escape)
self.ui.checkBoxNumero.stateChanged.connect(self.checkNum)
def fichierEleves(self):
caption="Choisissez un nouveau fichier de gestion des élèves"
dirname=os.path.dirname(self.prefs["schoolFile"])
newFile=QFileDialog.getOpenFileName (self, caption, dirname)
if os.path.exists(newFile):
self.prefs["schoolFile"]=newFile
db.writePrefs(self.prefs)
self.connecteGestionnaire(renew=True)
return
def connecteGestionnaire(self, renew=False):
try:
self.ui.lineEditFile.setText(self.prefs["schoolFile"])
self.ui.treeView.connecteGestionnaire(self.prefs["schoolFile"],
self.gestionnaire,
renew=renew)
except Exception as err:
QMessageBox.warning(None,
QApplication.translate("Dialog","Échec à l'ouverture du fichier élèves",None),
QApplication.translate("Dialog","Le fichier {schoolfile} n'a pas pu être traité : {erreur}",None).format(schoolfile=self.prefs["schoolFile"], erreur=err))
# fonction de rappel utilisée quand on coche/décoche la case pour
# prendre en compte le numéro
# @param state : l'état coché ou décoché
#
def checkNum(self, state):
if state==Qt.Checked:
self.ui.spinBoxNumero.setEnabled(True)
else:
self.ui.spinBoxNumero.setEnabled(False)
return
def replie(self):
self.ui.treeView.collapseAll()
return
def coche(self):
for e in self.ui.treeView.expandedItems():
e.setCheckState(Qt.Checked)
return
def decoche(self):
for e in self.ui.treeView.expandedItems():
e.setCheckState(Qt.Unchecked)
return
# Met à jour l'icône du bouton d'activation dans l'application parente
# pour refléter la présence d'éléments dans la liste
#
def updateParentIcon(self):
if self.parent():
self.parent().setAvailableNames(self.ui.listWidget.count() > 0)
return
def addToList(self):
for n in self.listeUnique_Names():
if not self.ui.listWidget.findItems(n,Qt.MatchExactly):
self.ui.listWidget.addItem(n)
self.updateParentIcon()
return
def delInList(self):
rows=[]
for i in self.ui.listWidget.selectedIndexes():
rows.append(i.row())
rows.sort(reverse=True)
for r in rows:
self.ui.listWidget.takeItem(r)
self.updateParentIcon()
return
# renvoie et supprime le premier élément de la liste de noms;
# si cette liste est vide, renvoie None
# @return un nom pour un baladeur, sinon None
#
def pop(self):
if self.ui.listWidget.count() == 0:
return
i=self.ui.listWidget.takeItem(0)
self.updateParentIcon()
data=i.data(Qt.DisplayRole)
return data
def itemStrings(self):
itemList=self.ui.listWidget.findItems("*",Qt.MatchWrap | Qt.MatchWildcard)
l=[i.data(Qt.DisplayRole) for i in itemList]
l.sort()
return l
def takeItem(self, item):
found=self.ui.listWidget.findItems(item,Qt.MatchExactly)
if len(found) > 0:
r=self.ui.listWidget.row(found[0])
i=self.ui.listWidget.takeItem(r)
self.updateParentIcon()
data=i.data(Qt.DisplayRole)
return data
return ""
def valid(self):
self.ok=True
self.close()
return
# Prend acte de l'abandon ; supprime les éléments de la liste et
# ferme le dialogue
#
def escape(self):
while self.ui.listWidget.count() > 0:
self.ui.listWidget.takeItem(0)
self.updateParentIcon()
self.ok=False
self.close()
return
def listeChoix(self):
return self.ui.treeView.checkedItems()
def listeUnique_Names(self):
result=[]
for e in self.listeChoix():
prefixe=""
if self.ui.checkBoxNumero.isChecked():
n=self.ui.spinBoxNumero.value()
prefixe="%02d-" %n
self.ui.spinBoxNumero.setValue(n+1)
result.append(prefixe+e.unique_name)
return result
if __name__=="__main__":
app=QApplication(sys.argv)
d=choixElevesDialog(gestionnaire=gestClasse.Sconet)
d.exec_()
print ("dialogue ok = %s" %d.ok)
i=d.pop()
while i:
print ("on a dépilé %s" %i)
i=d.pop()
src.choixEleves.choixElevesDialog.__init__
def __init__(self, parent=None, gestionnaire=gestClasse.Sconet)
Definition: choixEleves.py:46
src.choixEleves.choixElevesDialog.valid
def valid(self)
Prend acte de la validation.
Definition: choixEleves.py:204
src.choixEleves.choixElevesDialog.fichierEleves
def fichierEleves(self)
choisit et ouvre un nouveau fichiers d'élèves
Definition: choixEleves.py:72
src.choixEleves.choixElevesDialog.listeChoix
def listeChoix(self)
Definition: choixEleves.py:224
src.choixEleves.choixElevesDialog.prefs
prefs
Definition: choixEleves.py:51
QDialog
src.choixEleves.choixElevesDialog.coche
def coche(self)
coche toutes les cases d'élèves visibles
Definition: choixEleves.py:119
src.choixEleves.choixElevesDialog.gestionnaire
gestionnaire
Definition: choixEleves.py:52
src.choixEleves.choixElevesDialog.pop
def pop(self)
Definition: choixEleves.py:169
src.choixEleves.choixElevesDialog.ok
ok
Definition: choixEleves.py:48
src.choixEleves.choixElevesDialog.takeItem
def takeItem(self, item)
retire un item de la liste et le renvoie (pourvu qu'il y existe)
Definition: choixEleves.py:191
src.gestClasse.Sconet
Une classe pour travailler avec des données Sconet.
Definition: gestClasse.py:72
src.choixEleves.choixElevesDialog.ui
ui
Definition: choixEleves.py:49
src.choixEleves.choixElevesDialog.escape
def escape(self)
Definition: choixEleves.py:213
src.choixEleves.choixElevesDialog.listeUnique_Names
def listeUnique_Names(self)
Definition: choixEleves.py:227
src.choixEleves.choixElevesDialog
Definition: choixEleves.py:38
src.choixEleves.choixElevesDialog.updateParentIcon
def updateParentIcon(self)
Definition: choixEleves.py:136
src.choixEleves.choixElevesDialog.addToList
def addToList(self)
ajoute les élèves cochés dans la liste (s'ils n'y sont pas déjà)
Definition: choixEleves.py:144
src.choixEleves.choixElevesDialog.checkNum
def checkNum(self, state)
Definition: choixEleves.py:102
QtCore
src.choixEleves.choixElevesDialog.decoche
def decoche(self)
décoche toutes les cases d'élèves, visibles ou cachées
Definition: choixEleves.py:127
QtWidgets
src.choixEleves.choixElevesDialog.itemStrings
def itemStrings(self)
Definition: choixEleves.py:180
src.choixEleves.choixElevesDialog.delInList
def delInList(self)
retire les élèves de la liste quand ils y sont sélectionnés
Definition: choixEleves.py:154
src.choixEleves.choixElevesDialog.connecteGestionnaire
def connecteGestionnaire(self, renew=False)
met en place l'arbre des noms d'élèves
Definition: choixEleves.py:86
src.choixEleves.choixElevesDialog.replie
def replie(self)
replie toutes les classes du dialogue
Definition: choixEleves.py:112