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 la couleur d'un cercle


Sujet :

Tkinter Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 39
    Points
    39
    Par défaut Modifier la couleur d'un cercle
    Bonjour,

    Je souhaiterais modifier la couleur d'un cercle sans pour autant "détruire" le cercle pour en refaire un autre.

    Voici le code qui ne marche pas...

    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
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas (fen, bg = 'khaki')
    can.pack()
     
    x, y = 100, 200
     
    # création du cercle
    rond = can.create_oval(x, y, x+50, y+50, fill='dark olive green', tags= 1)
     
    # modification de la couleur du cercle
    rond.configure(fill='khaki')
     
    fen.mainloop()
    Est-ce que vous auriez une idée pour modifier la couleur du cercle sans supprimer ce dernier ou bien est-il incontournable d'effacer le premier cercle blanc pour en recréer un avec la couleur 'khaki'?

    Par avance merci pour votre aide.

  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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    can.itemconfigure(rond, fill=COLOR)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 39
    Points
    39
    Par défaut
    Super, ça fonctionne nickel.

    Merci beaucoup wiztricks!

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    from tkinter import *
    def fEfface():
    can.itemconfigure(rond, fill='khaki',width=0)
    fen = Tk()

    can = Canvas (fen, bg = 'khaki')
    can.pack()

    x, y = 100, 200

    # création du cercle
    rond = can.create_oval(x, y, x+50, y+50, fill='dark olive green')

    # modification de la couleur du cercle
    can.after(3000,fEfface)
    fen.mainloop()

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Comme j'ai vu un tags=1 dans le code une petite précision.

    Contrairement au Widget Text ou les tags sont gérés par le Widget pour le Canvas les tags sont des nom symboliques (normalement du texte sans espace) appartements à l'item lui même. Le Canvas n'as donc pas d'option tag_config et ne permets pas de configurer un tag qui n'as pas d'item.
    La configuration d'un item du Canvas se fait par l'id de celui-ci. L'id est un entier unique incrémenté lors de la création des items, create_* retournant celui-ci.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
    ov = can.create_oval(20, 20, 40, 40)
    ov1 = can.create_oval(50, 50, 80, 80)
     
    print(ov)
    print(ov1)
     
    fen.mainloop()
    Si l'on demande au Canvas de retrouver l'item ayant pour nom ('les tags sont des nom symboliques') "1" il retourneras l'item ayant pour identifiant 1 (Tkinter fonctionne avec de texte).
    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
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
     
    for v in range(100, 220, 30):
        can.create_oval(v-20, v, v, v+20, fill='dark olive green', tags=1)  # tags="1"
     
    print(can.find_withtag(1))  # can.find_withtag("1")
    for w in can.find_withtag(1):  # can.find_withtag("1")
        can.itemconfigure(w, fill='khaki', outline='khaki')
     
    fen.mainloop()
    Vu que l'identifiant est incrémenté tout au long de l’existence du Canvas l'utilisation d'un entier comme tag n'est pas une bonne idée.
    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
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
     
    for v in range(100, 220, 30):
        can.create_oval(v-20, v, v, v+20, fill='dark olive green', tags="3")
     
    print(can.find_withtag("3"))
    for w in can.find_withtag("3"):
        can.itemconfigure(w, fill='khaki', outline='khaki')
     
    fen.mainloop()
    Alors qu'un autre tag nous permets d'identifier un groupe d'item
    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
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
     
    for v in range(100, 220, 30):
        can.create_oval(v-20, v, v, v+20, fill='dark olive green', tags="toto")
     
    print(can.find_withtag("toto"))
    for w in can.find_withtag("toto"):
        can.itemconfigure(w, fill='khaki', outline='khaki')
     
    fen.mainloop()
    @+

    Edit (petit oubli):
    Et plus simplement avec le tag
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
     
    for v in range(100, 220, 30):
        can.create_oval(v-20, v, v, v+20, fill='dark olive green', tags="toto")
     
    can.itemconfigure("toto", fill='khaki', outline='khaki')
     
    fen.mainloop()
    Merci d'utiliser le forum pour les questions techniques.

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

    Vu que l'identifiant est incrémenté tout au long de l’existence du Canvas l'utilisation d'un entier comme tag n'est pas une bonne idée.
    Le vrai soucis est que çà ne fonctionne pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> import tkinter as tk
    >>> c = tk.Canvas()
    >>> iid = c.create_oval(100, 200, 150, 250, fill='blue', tag='10')
    >>> c.pack()
    >>> z = c.find_withtag('10')
    >>> z
    ()
    Et la doc Tk raconte:
    Items in a canvas widget may be named in either of two ways: by id or by tag. Each item has a unique identifying number, which is assigned to that item when it is created. The id of an item never changes and id numbers are never re-used within the lifetime of a canvas widget.

    Each item may also have any number of tags associated with it. A tag is just a string of characters, and it may take any form except that of an integer. For example, “x123” is OK but “123” is not. The same tag may be associated with many different items. This is commonly done to group items in various interesting ways; for example, all selected items might be given the tag “selected”.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  7. #7
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Exact, les tags entiers ne sont pas valides.

    En fait find_withtag recherche aussi l'id de l'objet.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    from tkinter import *
     
    fen = Tk()
     
    can = Canvas(fen, bg='khaki')
    can.pack()
     
    iid = can.create_oval(20, 20, 40, 40, fill='dark olive green')
     
    print(can.find_withtag("1"))
    print(can.gettags(iid))
     
    fen.mainloop()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> import tkinter as tk
    >>> c = tk.Canvas()
    >>> c.create_oval(100, 200, 150, 250, fill='blue', tag='2')
    1
    >>> c.create_oval(20, 20, 40, 40, fill='blue', tag='1')
    2
    >>> c.pack()
    >>> print(c.find_withtag('2'))
    (2,)
    >>> c.itemconfigure(c.find_withtag('2'), fill='red')
    @+
    Merci d'utiliser le forum pour les questions techniques.

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    58
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes de Haute Provence (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Avril 2011
    Messages : 58
    Points : 39
    Points
    39
    Par défaut
    Merci Ombre344 pour le 'can.after()' qui permet de visualiser la modification de la couleur du cercle.

    Et merci beaucoup à vous deux wiztricks et PauseKawa pour les explications complètes et détaillées que vous m'avez apportées sur les tags.

    Bonne soirée à tous.

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

Discussions similaires

  1. Modifier la couleur d'un cercle correspondant à la ligne d'une ComboBox
    Par Inaky dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 15/11/2011, 17h15
  2. modifier la couleur du contour d'un cercle
    Par scheme dans le forum Tkinter
    Réponses: 4
    Dernier message: 22/07/2009, 12h24
  3. [JTabbedPane] Modifier la couleur de l'onglet
    Par Pill_S dans le forum Composants
    Réponses: 6
    Dernier message: 17/09/2004, 12h44
  4. [C#] [DataGrid] Modifier la couleur d'une ligne
    Par nalaya dans le forum Windows Forms
    Réponses: 4
    Dernier message: 27/08/2004, 12h11
  5. Modifier la couleur de fond d'un popupmenu
    Par lil_jam63 dans le forum Composants VCL
    Réponses: 6
    Dernier message: 05/08/2004, 20h23

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