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 :

problème diaporama en python


Sujet :

Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut problème diaporama en python
    Bonjour, j'ais trouvé ce code sur ce forum pour faire un diapo en python. C'est quasiment ce que je voulais pour mon programme mais je dois dire que je bloc, je voudrais afficher une image, puis le programme exécute une fonction puis ré-affiche une image et ainsi de suite...
    Je ne sais pas ou placer ma fonction qui fait appelle a un mode, j'ai bien sur importer le mode dans mon programme. Voila la fonction qui devrait s'exécuté entre chaque image.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    valeurdegre = valeurdegre + epaisseur
    motor.position(1,1.8,valeurdegre)
    Et voila le code du diaporama:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import Tkinter as Tk
    import glob
    import Image, ImageTk
     
    root = Tk.Tk()
     
    ## chargement de toutes les images dans une liste
    listeimage = []
    for i in glob.glob('./img/*.*'):
        image = Image.open(i) 
        photo = ImageTk.PhotoImage(image) 
        listeimage.append(photo)
     
    ## l'affichage se fera sur un label
    lbl = Tk.Label(root)
     
    j = 0
    ## affichage des images
    def diapo():
        global j
        ## on essaie d'afficher une image sur le label
        try: lbl.config(image = listeimage[j])
        except: exit ## on a passe en revu toutes les images
        j+=1
        root.after(2000, diapo)  ## on rappelle la fonction diapo dans 2 secondes
     
    lbl.pack()
    root.after(100, diapo)
    root.mainloop()

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Pourquoi pas avant le root.after de la fonction diapo?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Voila le programme, mais le soucis c'est que j'ais un message d'erreur qui me dit que la variable "valeurdegre" n'est pas référencée.

    Voila le message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Exception in Tkinter callback
    Traceback (most recent call last):
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 1410, in __call__
        return self.func(*args)
      File "C:\Python27\lib\lib-tk\Tkinter.py", line 495, in callit
        func(*args)
      File "C:\Python27\Lib\pythonarduino.py", line 35, in diapo
        valeurdegre=valeurdegre+epaisseur
    UnboundLocalError: local variable 'valeurdegre' referenced before assignment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    import motor
    import time
    import Tkinter as Tk
    import glob
    import Image, ImageTk
     
    root = Tk.Tk()
    epaisseur=10
    valeurdegre=0
     
    ## chargement de toutes les images dans une liste
    listeimage = []
    for i in glob.glob('c:/images/*.GIF'):
        image = Image.open(i) 
        photo = ImageTk.PhotoImage(image) 
        listeimage.append(photo)
     
    ## l'affichage se fera sur un label
    lbl = Tk.Label(root)
     
    j = 0
    ## affichage des images
    def diapo():
        global j
        ## on essaie d'afficher une image sur le label
        try: lbl.config(image = listeimage[j])
        except: exit ## on a passe en revu toutes les images
        j+=1
        valeurdegre=valeurdegre+epaisseur
        motor.position(1,1.8,valeurdegre)
        root.after(2000, diapo)  ## on rappelle la fonction diapo dans 2 secondes
     
    lbl.pack()
    root.after(100, diapo)
    root.mainloop()

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Bonjour,

    Le problème sera que le root.after ne démarrera qu'après retour de la fonction secondaire.

    Je propose quelque chose de ce genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    from threading import Timer
     
    def next_image():
        img = listimages.pop(0)
        lbl.config(image = img)
        if listimages:
            Timer(5, next_image)
     
        ma_fonction()  # ici, on s'occupe de la seconde tâche
    Pas testé ...

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Faire comme pour le "j":
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def diapo():
        global j, valeurdegre
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Le problème sera que le root.after ne démarrera qu'après retour de la fonction secondaire.
    Ce ne sera "problème" que si le retour de la fonction se fait attendre.
    Mais pour l'instant, on n'en sait rien alors pourquoi coder pour résoudre un "no problem"?
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    merci de ta réponse mais je ne comprend pas, je doit remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def diapo():
        global j
        ## on essaie d'afficher une image sur le label
        try: lbl.config(image = listeimage[j])
        except: exit ## on a passe en revu toutes les images
        j+=1
        valeurdegre=valeurdegre+epaisseur
        motor.position(1,1.8,valeurdegre)
        root.after(2000, diapo)  ## on rappelle la fonction diapo dans 2 secondes
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def next_image():
        img = listimages.pop(0)
        lbl.config(image = img)
        if listimages:
            Timer(5, next_image)
        valeurdegre=valeurdegre+epaisseur
        motor.position(1,1.8,valeurdegre)

  8. #8
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    En fait problème n'était pas le mot juste, disons que la question était posée dans le sens où la fonction secondaire s'éffectuait pendant le timer.

    Si la fonction pouvait se faire avant le timer, la question n'aurait plus eu de raison d'être.

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2012
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    C'est résolu, merci beucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème interfaçage C/python
    Par minak dans le forum Interfaçage autre langage
    Réponses: 4
    Dernier message: 25/06/2009, 16h43
  2. Problème jeu hunter python
    Par florichoute dans le forum Tkinter
    Réponses: 1
    Dernier message: 20/05/2009, 14h00
  3. Petit problème en POO Python..
    Par Pierre-Hakim dans le forum Général Python
    Réponses: 0
    Dernier message: 08/05/2009, 22h54
  4. Problèmes pour utiliser Python.h
    Par micheldup dans le forum Interfaçage autre langage
    Réponses: 7
    Dernier message: 29/09/2008, 18h08
  5. Problème diaporama flash
    Par prevert dans le forum Flash
    Réponses: 1
    Dernier message: 22/11/2007, 13h52

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