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 :

modifier le contenu d'un canvas avec un bouton [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut modifier le contenu d'un canvas avec un bouton
    bonjour,
    Je suis en terminale s et j'ai besoin d'aide sur mon projet d'isn,
    le projet est de créer un logiciel pour éditer une image avec des algorithme.
    mon problème étant que je voudrai avoir un premier canvas avec la photo à modifier (choisi par l'utilisateur avec un askopenfile) à l’intérieur de celui ci, et a coter de ce canvas un autre lui avec une image blanche de base, en appuyant sur un bouton je souhaite que l'image dans la case de gauche soit modifié et affiché dans la case de droite, ça a beau avoir l'air évident à dire je n'arrive pas a la faire alors je tente ma chance 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
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    # -*- coding: utf-8 -*-
    """
    Created on Wed Mar  7 19:41:14 2018
     
    @author: Julien
    """
    from tkinter import*
    import PIL.Image
    import PIL.ImageTk
    import subprocess
    from tkinter.filedialog import *
    from PIL import ImageTk, Image
    from PIL import ImageFilter
    from numpy import sqrt
    import sys
     
     
     
    Largeur=600
    Hauteur=360
     
    algo=0
    def algo1():
        images=Image.open("titi.png")
        imgF = images.filter(ImageFilter.CONTOUR)   # algo qui isole les contours d'une image
        imgF.save("tito.png")
        algo=1
     
     
     
    # Création de la fenêtre principale
    Mafenetre=Tk()
    Mafenetre.geometry("1300x600")
    Mafenetre.title("photoALGO")
    #-------------------------------#
     
     
    # Création d'un widget Menu
    menubar = Menu(Mafenetre)
    menufichier = Menu(menubar,tearoff=0)
    menubar.add_cascade(label="Fichier",command=Mafenetre.destroy)
    #--------------------------------------------------------------#
     
    # Affichage du menu
    Mafenetre.config(menu=menubar)
    #-----------------------------#
     
     
     
    path = askopenfilename(filetypes=[('PNG FILES','*.png')])
    print(path)                                                                                         #askopenfile pour ouvrir le fichier de son choix
     
    photo = PIL.Image.open(path)
     
    tailleL, tailleH = photo.size
     
     
    print(int(tailleL))
    print(tailleH)
                                                                   # je resize l'image pour qu'elle rentre parfaitement dans mon canvas 
    resizetailleL=600/tailleL
    resizetailleH=360/tailleH
     
    newPhoto = photo.resize((int(tailleL*resizetailleL),int(tailleH*resizetailleH)))
    newPhoto.save("titi.png")
     
     
    Largeur=600
    Hauteur=360
     
     
    photos = PhotoImage(file="titi.png")
    print(photos)
    Can1=Canvas()
    Can1.configure(width=Largeur, height=Hauteur)                                   #Canvas avec l'image a modifier
    image = Can1.create_image(0,0, image = photos, anchor='nw')
    Can1.grid(row=0, column=0)
     
     
     
     
     
    img = PhotoImage(file="blanc.png")
    print(img)
    cvs=Canvas()
    cvs.configure(width=Largeur, height=Hauteur)                            #canvas avec une image blanche 
    images = cvs.create_image(600,0, image = img, anchor='ne')
    cvs.grid(row=0, column=2)
     
     
     
     
     
     
     
     
    #-----------------------------------------------------------------
     
    #Bouton pour executer les algorithme
    But=Button()
    Button(Mafenetre, text ='Algo 2',width=10,height=4,command = algo1).grid(row=5, column=0,sticky='ne')
    Button(Mafenetre, text ='Algo 3',width=10,height=4,command = Mafenetre.destroy).grid(row=5, column=1)                   
    Button(Mafenetre, text ='Algo 4',width=10,height=4,command = Mafenetre.destroy).grid(row=5, column=2,sticky='nw')
    But.grid()
    #----------------------------------------------------------------------------------------------------#
     
     
     
     
    Mafenetre.mainloop()
    je voudrai donc remplacer blanc.png par tito.png ...
    Merci de votre attention !

  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,

    Pour modifier un widget lorsqu'on appuie sur un Button, il faut lui associer un callback/fonction à appeler lorsqu'on clique dessus. Et c'est ce callback/fonction qui fera le boulot. En code, ça donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import tkinter as tk
     
    root = tk.Tk()
     
    def callback():
        btn.configure(bg='red')
     
    btn = tk.Button(root, text='click', command=callback)
    btn.pack()
    tk.mainloop()
    Ici, on ne fait que modifier la couleur de fond du Button, mais c'est la même mécanique pour modifier un item d'un Canvas. Pour comprendre les détails de cette mécanique de base, les tutos sont là pour çà.
    Et lorsque vous serez à l'aise avec ces mécanismes, il faut regarder la spécificité de chaque widget utilisé dans une documentation tkinter.

    Citation Envoyé par fazerchiotte Voir le message
    ça a beau avoir l'air évident à dire je n'arrive pas a la faire alors je tente ma chance ici .
    Si c'était "évident", il n'aurait pas été nécessaire d'écrire documentations et tutoriels.
    Et il est normal de ne pas s'en sortir si vous vous lancez là dedans sans avoir pris le temps de les consulter/travailler... Mais apprendre est quelque chose qu'on ne peut faire à votre place.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    bonjour,
    je n'arrive pas même avec la fonction itemconfig, je désespère car la documentation est très légère sur ce sujet et je n'y comprend rien ...

  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
    Salut,

    Citation Envoyé par fazerchiotte Voir le message
    je n'arrive pas même avec la fonction itemconfig, je désespère car la documentation est très légère sur ce sujet et je n'y comprend rien ...
    EN modifiant légèrement le code précédent:
    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
    import tkinter as tk
     
    root = tk.Tk()
     
    canvas = tk.Canvas()
    canvas.pack()
    iid = canvas.create_rectangle(0, 0, 200, 200)
     
    def callback():
        canvas.itemconfig(iid, fill='red')
     
    btn = tk.Button(root, text='click', command=callback)
    btn.pack()
     
    tk.mainloop()
    vous voyez, c'est pas compliqué mais si vous n'avez pas pris le temps d'ouvrir un tuto. sûr que lire la documentation des widgets sera difficile, et on ne va pas coder à votre place.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    effectivement ce n'est pas compliqué mais moi je souhaite faire ça avec une image et non avec une couleur dans un canvas c'est la que repose mon problème

  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 fazerchiotte Voir le message
    c'est la que repose mon problème
    Quel problème? Au cas où vous avez des exemples dans la FAQ.

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

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    le problème est: comment changer l'image dans un canvas déjà existant ?

  8. #8
    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 fazerchiotte Voir le message
    le problème est: comment changer l'image dans un canvas déjà existant ?
    Si pour créer l'image, c'est .create_image(..., image=...) pour la changer ce sera .itemconfig(..., image=...) comme dans le cas du rectangle.
    La seule difficulté étant de garder une référence à la Photoimage comme mentionné dans l'article de la FAQ.

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

  9. #9
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2018
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ai résolu mon problème

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

Discussions similaires

  1. Modifier le contenu d'un word avec OpenXML
    Par Freud44 dans le forum ASP.NET
    Réponses: 0
    Dernier message: 15/04/2011, 10h32
  2. [MySQL] Modifier le contenu d'une table avec un formulaire ?
    Par quaresma dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 28/10/2010, 21h41
  3. Modifier le contenu d'un bubble avec jquery
    Par madjidri dans le forum jQuery
    Réponses: 2
    Dernier message: 03/04/2009, 10h55
  4. [SimpleXML] Modifier le contenu d'un noeud
    Par michael_MS dans le forum Bibliothèques et frameworks
    Réponses: 17
    Dernier message: 16/10/2008, 15h24
  5. modifier le contenu d'une table avec innerHTML
    Par francon81 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 31/05/2005, 09h02

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