IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Afficher une simple galerie photos [Python 3.X]


Sujet :

Python

  1. #1
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut Afficher une simple galerie photos
    Bonjour,
    je cherche simplement à afficher les photos d'un répertoire pour pouvoir en sélectionner une.
    Pour l'instant j'ai programmé l'affichage du fond avec pygame mais maintenant je voudrais afficher chaque photo du répertoire une par une et pouvoir cliquer pour passer a la suivante.
    Merci pour votre aide, j'ai vainement cherché sur le web mais je ne trouve rien de tout simple.
    A+

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 746
    Par défaut
    Salut,

    Citation Envoyé par dodineau Voir le message
    je voudrais afficher chaque photo du répertoire une par une et pouvoir cliquer pour passer a la suivante.
    Il faut procéder par étapes: d'abord afficher une photo, puis fabriquer une liste de photos et naviguer de l'une à l'autre, puis construire cette liste à partir du contenu du répertoire...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Merci pour cette réponse.
    J'ai commencé à lister le répertoire contenant les photos mais je n'arrive pas à isoler les fichiers JPG.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    import os
    path_images = 'Images/'
    list = os.listdir(path_images)
    number_files = len(list)
    for nb in range(number_files):
        print (list[nb])
    en exécutant ce code j'obtiens bien la liste des fichiers de mon répertoire mais je voudrais isoler les JPG.

    A+

  4. #4
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Tu peux regarder du côté de "endswith()" ou bien en comparant les 4 derniers caractères ".jpg", donc chaine[-4:]

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Utilise glob dans ce cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    import glob
    images = glob.glob("Images/" + "*.JPG")
    Mais tu devras peut-être rajouter les ".jpg", ".jpeg", et ".JPEG" ...

  6. #6
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    VinsS : Je ne voulais pas utiliser la fonction glob.glob car j'ai lu sur beaucoup de sites que oslistdir était plus fiable.

    marco056 : C'est ce que j'ai commencé à faire mais je pensais qu'il existait une fonction directe du style de glob.glob.

    A+

  7. #7
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Citation Envoyé par dodineau Voir le message
    VinsS : Je ne voulais pas utiliser la fonction glob.glob car j'ai lu sur beaucoup de sites que oslistdir était plus fiable.
    Tu peux citer tes sources ? Car chez moi glob.glob a toujours bien fonctionné ...

  8. #8
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Citation Envoyé par lg_53 Voir le message
    Tu peux citer tes sources ? Car chez moi glob.glob a toujours bien fonctionné ...
    Bonsoir,
    je ne retrouve plus où j'avais lu cette remarque.
    Mais bon comme j'utilise os.listdir et que ça fonctionne je n'ai pas non plus cherché plus loin.

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    Citation Envoyé par dodineau Voir le message
    je ne retrouve plus où j'avais lu cette remarque.
    Mais bon comme j'utilise os.listdir et que ça fonctionne je n'ai pas non plus cherché plus loin.
    Je ne suis pas certain qu'on puisse dire que l'une est plus ou moins fiable que l'autre. En général, je considère que les outils Python sont tous aussi fiables les uns que les autres.

    Tout ce qu'on peut dire c'est que les deux fonctions n'ont pas le même mode d'action. glob.glob() va te permettre d'utiliser des méta-caractères tandis que os.listdir() va se contenter de lister le dossier cible. Donc ça t'offre deux points d'entrée différents pour un travail de listing de dossier.
    Et bien entendu chaque mode d'action doit avoir en contrepartie des inconvénients variés et différents selon qu'on va choisir l'un ou l'autre de ces deux outils.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Merci pour votre aide.
    J'ai fait cette galerie simple.
    Je vous mets le fichier en téléchargement pour ceux que ça intéresse.
    Pour tester il vous suffit d'appuyer sur A pour voir l'image précédente ou P pour voir l'image suivante.

    Pièce jointe 487359

    Merci pour votre retour.
    A+

  11. #11
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dodineau Voir le message
    Je vous mets le fichier en téléchargement pour ceux que ça intéresse.
    Pas mal. Tes lettres stylisées sont très belles.

    Je te propose maintenant les modifications suivantes
    Déjà remplacer list=truc puis list.sort() par un simple list=sorted(truc). Eventuellement ne pas utiliser un nom de type comme variable serait un plus.

    Ensuite remplacer
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    image='Lettres/A.jpg'
    img = pygame.image.load(image)
    img = img.convert() 
    img = pygame.transform.scale(img, (100,100))
    screen.blit(img,(225,(monitor_v-100)/2))
     
    image='Lettres/P.jpg'
    img = pygame.image.load(image)
    img = img.convert() 
    img = pygame.transform.scale(img, (100,100))
    screen.blit(img,(1500,(monitor_v-100)/2))

    par
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (lettre, factor) in (
    	("A", 225),
    	("P", 1500),
    ):
    	img = pygame.image.load(os.path.join("Lettres", "%s.jpg" % lettre)).convert()
    	screen.blit(
    		pygame.transform.scale(img, (100,100)),
    		(factor, (monitor_v-100)/2),
    	)
    # for

    On peut même supprimer la variable "img" mais ça risque de devenir moins lisible. Accessoirement chez-moi, 1500 c'est trop à droite (moi j'ai mis 800).

    On peut supprimer la variable "stop1" par l'utilisation judicieuse d'un break et remplacer if event.type==KEYDOWN and (event.key==K_q or event.key==K_SPACE) par if event.type == KEYDOWN and event.key in (K_q, K_SPACE) ce qui t'offre ainsi la possibilité de rajouter facilement d'autres valeurs éventuelles. On peut même factoriser la gestion du "KEYDOWN" (testé 3 fois) associé au "K_a" et du "K_p" en jouant avec les modulos mais je ne suis pas certain que ce soit vraiment mieux.

    Et bien évidemment rajouter # coding: utf-8 en seconde ligne ce qui te permettra d'inclure dans ton code des instructions, strings et commentaires avec des caractères accentués.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  12. #12
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 746
    Par défaut
    Salut,

    Outre les remarques de VinsS, en écrivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    while stop1==0:
        event=pygame.event.poll()
        ...
    pygame.event.poll retourne toujours un event qui s'il n'y a rien sera pygame.NOEVENT. Dit autrement, çà bouffe du CPU pour pas grand chose d'autant qu'existe pygame.event.wait qui attend qu'il y ait un event à retourner.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  13. #13
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Bonjour et merci pour vos retours.

    wiztricks: J'ai changé avec un wait au lieu de poll

    Sve@r : J'ai fait les transformations que tu proposes et j'ai ajouté import os .
    Tout fonctionne.
    Je pensais que utf8 était d'office avec python 3, non ?

    PS : les lettres et les photos sont trouvées sur internet

    J'ai mis le fichier modifié en pièce jointe Pièce jointe 487440.

    A vos avis...

  14. #14
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par dodineau Voir le message
    Je pensais que utf8 était d'office avec python 3, non ?
    Oui, pardon j'avais pas fait attention. Ceci dit, ça n'empêche pas de le mettre quand-même pour les nostalgiques de P2...

    Citation Envoyé par dodineau Voir le message
    A vos avis...
    Tu as le droit, pour plus de lisibilité, de découper tes lignes. Exemple avec screen.blit(pygame.transform.scale(pygame.image.load(os.path.join("Lettres", "%s.jpg" % lettre)).convert(),(100,100)),(factor, (monitor_v-100)/2),) que j'écrirai
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    screen.blit(
    	pygame.transform.scale(
    		pygame.image.load(os.path.join("Lettres", "%s.jpg" % lettre)).convert(),
    		(100, 100),
    	),
    	(factor, (monitor_v-100)/2),
    )

    Reste la variable "list" qui va obfusquer le type list(). Et ensuite tu mets tout ton code dans une fonction (par exemple "diaporama()") dans laquelle tu passes le dossier contenant les images en paramètre et tu clôtures ton programme de cette façon
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
    	diaporama(sys.argv[1])

    Ainsi ton programme pourra soit être appelé depuis ton shell (tu lui passes le dossier à traiter en paramètre), soit être importé comme module dans un autre programme.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  15. #15
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Et ensuite tu mets tout ton code dans une fonction (par exemple "diaporama()") dans laquelle tu passes le dossier contenant les images en paramètre et tu clôtures ton programme de cette façon
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if __name__ == "__main__":
    	diaporama(sys.argv[1])

    Ainsi ton programme pourra soit être appelé depuis ton shell (tu lui passes le dossier à traiter en paramètre), soit être importé comme module dans un autre programme.
    J'ai ajouté ces 2 lignes en fin de programme mais ça me donne une erreur en quittant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        diaporama(sys.argv[1])
    NameError: name 'diaporama' is not defined

  16. #16
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 746
    Par défaut
    Citation Envoyé par dodineau Voir le message
    J'ai ajouté ces 2 lignes en fin de programme mais ça me donne une erreur en quittant.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        diaporama(sys.argv[1])
    NameError: name 'diaporama' is not defined
    Probable que vous ayez omis préalable disant "mets tout ton code dans une fonction (par exemple "diaporama()")"

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Voila ma structure
    • def diaporama()
    • code
    • if __name__ == "__main__":
      diaporama(sys.argv[1])


    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        diaporama(sys.argv[1])
    IndexError: list index out of range

  18. #18
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 746
    Par défaut
    Avez vous compris l'intérêt de ces changements?

    Citation Envoyé par Sve@r Voir le message
    Ainsi ton programme pourra soit être appelé depuis ton shell (tu lui passes le dossier à traiter en paramètre), soit être importé comme module dans un autre programme.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  19. #19
    Membre confirmé Avatar de dodineau
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    100
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 100
    Par défaut
    Tout d'abord je travaille avec un raspberry Pi3 et Thonny python pour écrire le programme.
    Je suis assez débutant et je ne connais pas encore toutes les subtilités de Python
    L'intérêt d'exécuter depuis le shell c'est que l'on peut dire au programme avec quel répertoire de photos travailler. Çà peut être intéressant si l'on a plusieurs répertoires différents. (c'est effectivement mon cas).
    Moi pour l'instant je veux juste que ça fonctionne depuis Thonny mais bien sur par la suite je l'intégrerai comme module quand j'en aurai besoin donc effectivement cette modification m'intéresse.

  20. #20
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 746
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 746
    Par défaut
    Citation Envoyé par dodineau Voir le message
    L'intérêt d'exécuter depuis le shell c'est que l'on peut dire au programme avec quel répertoire de photos travailler. Çà peut être intéressant si l'on a plusieurs répertoires différents. (c'est effectivement mon cas).
    Et bien l'erreur traduit que vous avez probablement omis de passer le répertoire de photos en argument à la ligne de commande lançant le programme.

    Citation Envoyé par dodineau Voir le message
    Je suis assez débutant et je ne connais pas encore toutes les subtilités de Python
    Lancer un programme en ligne de commande avec des arguments genre ls -all ne dépend pas du langage avec lequel a été écrit le programme. Ce qui est spécifique à Python, c'est comment récupérer ces arguments via sys.argv.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 3 123 DernièreDernière

Discussions similaires

  1. Afficher une liste avec photo dans un gridview
    Par peregna2007 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/07/2008, 16h52
  2. Afficher une simple image en C#
    Par jonathanC dans le forum C#
    Réponses: 8
    Dernier message: 12/02/2008, 14h12
  3. [JBoss] Afficher une simple page html
    Par jacko2 dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 11/02/2008, 09h12
  4. Afficher une simple liste avec GTK
    Par gedeon555 dans le forum GTK+
    Réponses: 2
    Dernier message: 04/11/2007, 11h15
  5. afficher une simple message box dans un dll
    Par nregis dans le forum VC++ .NET
    Réponses: 1
    Dernier message: 30/09/2006, 10h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo