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

Tkinter Python Discussion :

"switcher" une image avec tkinter. [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut "switcher" une image avec tkinter.
    bonjour la communauté!
    avant de vous exposer une petite histoire afin que vous puissiez, je l'espère, comprendre mon souci:
    j'apprends actuellement le japonais, j'ai appris les 92 principaux kana. cependant pour que je puisse m'entrainer j'ai voulu mettre un place un programme me permettant de me tester.
    cepedant je suis bloqué. le but du programme est de pouvoir afficher une image (kana) au hasard. un bouton devrait permettre de passer à une nouvelle image au hasard.
    dès que je lance le programme, un kana apparait ok!. je peux créer un bouton pour effacer le canvas = ok mais lors que je veux remplacer par une nouvelle image, c'est ici que je bloque.
    je me suis inspiré d'autres programmes cependant si de mon côté ça ne marche pas c'est que clairement je m'y prends mal
    voici mon code sans le bouton pour changer l'image.
    je sais que cela va en embeter certains mais je ne suis pas encore à l'aise avec les classes. donc si il vous était possible de ne pas me diriger vers cette solution je vous en serai gré.

    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
    36
     
    from tkinter import *
    from random import randrange
     
    def affichekana():
        ""
        tplkan = ("B_hir_","B_kat_")
        tplsyll = ("a","i","u","e","o","ka","ki","ku","ke","ko","sa","si","su","se","so","ta","ti","tu","te","to","na","ni","nu","ne","no","ma","mi","mu","me","mo","ya","yu","yo","ra","ri","ru","re","ro","wa","wo","n","ha","hi","hu","he","ho")
     
        a1 = randrange(len(tplkan))
        a = tplkan[a1]
     
        b1 = randrange(len(tplsyll))
        b = tplsyll[b1]
     
        path = './img/'+a+b+'.gif'
     
        return path
     
    def erasekana():
        ""
        canv1.delete(ALL)
     
    fen = Tk()
     
    canv1 = Canvas(fen, width=200, height=200, bg='white')
    canv1.pack()
     
    path = affichekana()
    photo = PhotoImage(file=path)
    item = canv1.create_image(100,100,image = photo)
     
    but1 = Button(fen,text="efface",command=erasekana)
    but1.pack()
     
    fen.mainloop()
    je joins les documents (si ça peut aider ou même servir pour certains ^^ )
    92Kana.zip

    merci à tous!
    cdt

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Vous avez un exemple ici dont vous pourriez vous inspirer.

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

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut ...
    bonjour,

    merci pour la réponse. le souci est que j'utilise,par préférence pour le moment, tkinter
    vous auriez une piste utilisant ce module?

    cdt

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par ivigu Voir le message
    merci pour la réponse. le souci est que j'utilise,par préférence pour le moment, tkinter
    vous auriez une piste utilisant ce module?
    L'exemple proposé utilise bien tkinter.
    Je vous le recopie ici:
    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
    from tkinter import *
    from glob import glob
    from PIL import Image, ImageTk
     
     
    j = 0
    window = Tk()
    lbl = Label(window)
    lbl.pack()
     
    slides = []
    for i in glob('./slides/*.JPG'):
        image = Image.open(i)
        photo = ImageTk.PhotoImage(image)
        slides.append(photo)
     
    def slideshow():
        global j
        if j == len(slides):
            j = 0
        try:
            lbl.config(image = slides[j])
            j += 1
        except:
            exit
        window.after(2000, slideshow)
     
    slideshow()
    window.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut
    bonjour
    ôtez-moi d'un doute. la méthode pour afficher des images avec tkinter n'est-elle pas photoimage qui ne gère que les gif et je ne sais plus quel autre format? dans votre exemple les images sont en jpeg. du coup cela me gêne un peu.

    cdt

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par ivigu Voir le message
    dans votre exemple les images sont en jpeg. du coup cela me gêne un peu.
    Votre question porte sur comment changer d'image mais s'il n'y a que çà pour vous faire plaisir:
    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
    from tkinter import *
    from glob import glob
    # from PIL import Image, ImageTk
     
     
    j = 0
    window = Tk()
    lbl = Label(window)
    lbl.pack()
     
    slides = []
    for i in glob('./slides/*.gif'):
    #    image = Image.open(i)
    #    photo = ImageTk.PhotoImage(image)
        image = PhotoImage(file=i)
        slides.append(image)
     
    def slideshow():
        global j
        if j == len(slides):
            j = 0
        try:
            lbl.config(image = slides[j])
            j += 1
        except:
            exit
        window.after(2000, slideshow)
     
    slideshow()
    window.mainloop()
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut pas résolu mais...
    bonjour
    je crois comprendre le concept. ce n'est pas ce que je recherche mais l’idée me semble intéressante. je vais donc creuser ce point aussi.

    merci pour votre aide

    cdt

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 27
    Points : 20
    Points
    20
    Par défaut là c'est vraiment résolu =)
    bonjour à tous et toutes,
    je reviens une dernière fois sur mon sujet car j'ai enfin trouvé le code pour ce que je voulais faire et peut-être cela intéressera du monde.

    ce que je cherchais à faire:
    générer une fenêtre qui afficherait un kana et dont un clic de bouton modifierai l'image.

    c'est malheureusement en écrivant ces mots que je pense comprendre d'où me venait ce sentiment d'inachevé. je tiens tout d'abord à présenter mes plus plates excuses à mon malheureux bienfaiteur: wiztricks, qui à bien malgré lui tenté de m'aider mais qui a lui aussi dû ressentir cette frustration.

    cette aventure m'a au moins appris deux différentes manières d'afficher une image avec tkinter:
    -afficher l'image avec un label
    -afficher l'image avec le constructeur canvas.create_image

    c'est cette dernière solution que j'ai retenu parce que je n'arrivais pas a supprimer l'image en utilisant canvas.delete() avec le label.

    l'affichage étant maintenant possible il me fallait pouvoir supprimer l'image pour en afficher une autre. c'est là que j'ai rencontré un nouveau soucis. j'ai eu du mal à comprendre le principe du ramasse-miette mais le souci venait bien de là. Afficher une image en direct, pas de souci mais dès que l'on utilise une fonction le canevas restait blanc.

    ceci était expliqué http://effbot.org/tkinterbook/photoimage.htm

    "You must keep a reference to the image object in your Python program, either by storing it in a global variable, or by attaching it to another object."
    j'ai compris en lisant https://www.developpez.net/forums/d95892/autres-langages/python-zope/gui/tkinter/tkinter-charger-image-on-clique-bouton/

    je n'avais plus qu'à l'appliquer à mon code.


    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
    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
     
    ##(modules)
    from tkinter import *
    from random import randrange
     
    ####
     
    ##(fonctions)
    def rndkana():
        "permet de choisir aléatoirement l'hiragana ou le katakana"
     
        tplkan = ("B_hir_","B_kat_")
        tplsyll = ("a","i","u","e","o","ka","ki","ku","ke","ko","sa","si","su","se","so","ta","ti","tu","te","to","na","ni","nu","ne","no","ma","mi","mu","me","mo","ya","yu","yo","ra","ri","ru","re","ro","wa","wo","n","ha","hi","hu","he","ho")
     
        a = randrange(len(tplkan))
        b = randrange(len(tplsyll))
     
        sortie = tplkan[a]+tplsyll[b]
     
        return sortie
     
    def test():
        ""
     
        #global img
        global ar
        #img={}
     
        canv1.delete("all")
     
        root = './img/'
        fin = rndkana()
        path = root+fin+'.gif'
        photo = PhotoImage(file=path)
        #img['a'] = photo
        ar = photo
        id = canv1.create_image(100,100,image=photo)
     
    ####
     
    ##(variables)
    root = './img/'
    fin = rndkana()
    path = root+fin+'.gif'
     
    ####
     
     
    ##(interface)
    fen = Tk()
     
    canv1 = Canvas(fen, width=200, height=200, bg='white')
    canv1.pack()
     
    photo = PhotoImage(file=path)
     
    id = canv1.create_image(100,100,image=photo)
     
    but1 = Button(fen, text="Suivant", command=test)
    but1.pack()
     
    fen.mainloop()
     
    ####
    il faut que la variable soit globale pour mon cas sinon le canevas resta blanc cela marche aussi avec le dictionnaire par ailleurs.

    en utilisant les documents de mon premier post avec ce code vous obtiendrez le rendu final (sauf erreur de ma part)

    merci

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

Discussions similaires

  1. Intégrer une image avec tkinter
    Par elprogrammateur dans le forum Tkinter
    Réponses: 1
    Dernier message: 23/04/2016, 15h48
  2. [Python 3.X] Insérer une image avec Tkinter
    Par Alexobs dans le forum Tkinter
    Réponses: 0
    Dernier message: 15/05/2015, 17h47
  3. Inserer une image avec Tkinter
    Par Strcpy_P dans le forum Tkinter
    Réponses: 3
    Dernier message: 27/01/2013, 21h28
  4. retourner une image avec tkinter
    Par kokliklo dans le forum Tkinter
    Réponses: 1
    Dernier message: 30/04/2009, 13h35

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