"""ecran d'exploration des ressources (images, sons)""" from PyQt4.QtCore import * from PyQt4.QtGui import * from ui.ecran_explorateur import Ui_exr_fenetre from ui.panneauImage import Ui_exi_panneau import os from sys import argv from ressources import * class EcranExplorateur(QDialog): def __init__(self, parent=None): """initialisation de la fenetre""" super (EcranExplorateur, self).__init__(parent) self.createWidgets() self._selection = None self._panneaux = [] self._panneauSelectionne = None def createWidgets(self): """construction de l'interface""" self.ui = Ui_exr_fenetre() self.ui.setupUi(self) self.connect(self.ui.exr_ok, SIGNAL("clicked()"), self.valider) self.connect(self.ui.exr_annuler, SIGNAL("clicked()"), self.annuler) self.connect(self.ui.exr_filtreNom, SIGNAL("textEdited(QString)"), self.majFiltre) self.connect(self.ui.exr_filtreRep, SIGNAL("currentIndexChanged(int)"), self.majFiltre) self.ui.exr_layout.setColumnMinimumWidth(0, 140) self.ui.exr_layout.setColumnStretch(0, 1) self.ui.exr_layout.setColumnMinimumWidth(1, 140) self.ui.exr_layout.setColumnStretch(1, 1) self.ui.exr_layout.setColumnMinimumWidth(2, 140) self.ui.exr_layout.setColumnStretch(2, 1) def charger(self, typeRessource = "I"): """ressource vaut I ou S, pour image et sons""" fichiers = [] for repR in repRessources(): repAbs = os.path.join(repApp(), repR) for (dirpath, dirnames, filenames) in os.walk(repAbs): for f in filenames: if typeRessource == "I": r = Image(os.path.join(repR, f)) else: r = Son(os.path.join(repR, f)) if r.estValide(): fichiers.append(r) for f in fichiers: self.ajouterImage(f) def ajouterImage(self, img): """ajoute un panneau image a la liste deroulante""" panneau = PanneauImage(self) panneau.chargerImage(img) self._panneaux.append(panneau) self.ui.exr_layout.addWidget(panneau) def selection(self): return self._selection def majSelection(self, panneau): if self._panneauSelectionne: self._panneauSelectionne.selectionner(False) self._panneauSelectionne = panneau self.majAffichage() def majAffichage(self): self.ui.exr_ok.setEnabled(self._panneauSelectionne != None) def majFiltre(self): filtreRep = "" if self.ui.exr_filtreRep.currentIndex() > 0: filtreRep = repRessources()[(self.ui.exr_filtreRep.currentIndex()-1)] filtreNom = self.ui.exr_filtreNom.texte() for panneau in self._panneaux: panneau.appliquerFiltre(filtreRep, filtreNom) def valider(self): self._selection = self._panneauSelectionne.image() self.done(1) def annuler(self): self.done(0) class PanneauImage(QFrame): def __init__(self, fenetre, parent=None): """initialisation de la fenetre""" self.fenetre = fenetre super (PanneauImage, self).__init__(parent) self.createWidgets() self._image = "" self._selectionnee = False def createWidgets(self): """construction de l'interface""" self.ui = Ui_exi_panneau() self.ui.setupUi(self) def selectionner(self, actif): if actif: couleur = QColor(250, 250, 250, 250) else: couleur = QColor(240, 240, 240, 240) palette = QPalette() palette.setColor(QPalette.Window, couleur) self.setPalette(palette) def chargerImage(self, image): self.ui.exi_image.chargerImage(image.chemin()) self.ui.exi_nom.majTexte(image.nom()) self.ui.exi_details.majTexte((image.extension().replace(".", "")).upper()) self.ui.exi_situ.majTexte(image.repR()) self._image = image def image(self): return self._image def appliquerFiltre(self, filtreRep, filtreNom): if len(filtreRep) > 0: self.setVisible(filtreNom in self._image.nom() and \ self._image.repR() == filtreRep) else: self.setVisible(filtreNom in self._image.nom()) def mousePressEvent(self, event): if event.button() == 1: if not self._selectionnee: self.fenetre.majSelection(self) self.selectionner(True) def mouseDoubleClickEvent(self, event): if event.button() == 1: self.fenetre.valider() if __name__ == "__main__": app = QApplication(argv) #settrace(trace_calls) exp = EcranExplorateur() exp.show() exp.charger() r = app.exec_() ressource = exp.selection() if ressource: print ressource.nom() exit(r)