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 :

Valeurs RGB d'une couleur.


Sujet :

Python

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut Valeurs RGB d'une couleur.
    Bonjour,
    Je souhaite récupérer les valeurs des canaux RGB de couleurs typiques de tkinter comme tomato2, snow, salmon, ...
    En effet, lorsque je clique sur une case colorée, j'ai le nom de la couleur, mais j'aimerais ensuite atteindre les 3 canaux pour remplir une image avec PIL.

    Les codes sont disponibles ici et je peux passer par un fichier csv pour les récupérer mais cela me paraît bien compliqué pour pas grand chose...
    http://www.discoveryplayground.com/c...ds/rgb-colors/

    Pour cmap, on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from matplotlib import cm
    print(cm.jet(0))
    mais pour tkinter ?
    Pas d'aide par mp.

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

    Citation Envoyé par marco056 Voir le message
    mais pour tkinter ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >>> import tkinter as tk
    >>> root = tk.Tk()
    >>> root.winfo_rgb('red')
    (65535, 0, 0)
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par marco056 Voir le message
    Bonjour,
    Je souhaite récupérer les valeurs des canaux RGB de couleurs typiques de tkinter comme tomato2, snow, salmon, ...
    En effet, lorsque je clique sur une case colorée, j'ai le nom de la couleur, mais j'aimerais ensuite atteindre les 3 canaux pour remplir une image avec PIL.

    Les codes sont disponibles ici et je peux passer par un fichier csv pour les récupérer mais cela me paraît bien compliqué pour pas grand chose...
    http://www.discoveryplayground.com/c...ds/rgb-colors/

    Pour cmap, on peut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    from matplotlib import cm
    print(cm.jet(0))
    mais pour tkinter ?
    Je ne sais pas si çà peut t'aider, mais je te donne un lien dans lequel tu pourras trouver
    à la page 20 un moyen de connaître cette valeur
    1.3. méthodes de widget
    * winfo_rgb(nom_couleur) : cette méthode est une méthode de widget ; elle retourne un tuple
    des valeurs décimales des composantes RGB de nom_couleur. On rappelle qu'en
    interne, les couleurs sont codées sur 48 bits.
    exemple :
    tkinter page 20 tk01 : valeurs d'attributs standards
    print (self.winfo_rgb(boutonNon.cget("highlightcolor")))
    (65535, 0, 0)
    * winfo_depth() : retourne le nombre de
    http://ateliers.mse.free.fr/tkinter/tkinter-ref5.pdf

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Un grand merci !
    Pas d'aide par mp.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Bon, désolé, je n'ouvre pas d'autre fil car je suis toujours le même programme.
    Cette fois-ci, je souhaiterais récupérer le contenu de ces canaux pour l'utiliser dans une autre fonction.
    J'ai tenté de réduire mon programme pour mettre ne évidence mon souci. J'espère que c'est clair.

    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
    from tkinter import Entry, Label, Tk, Scale, HORIZONTAL, Frame, Toplevel
    from tkinter import Canvas, PhotoImage, Button, StringVar, IntVar
     
     
    fen1 = Tk()
    fen1.title("Retouche photo")
    fen1.configure(bg = "ghost white")
    fen1.geometry("400x100")
     
    COLORS = ['snow', 'ghost white']
     
     
    MAX_ROWS = 2
    FONT_SIZE = 1
     
    def code_rgb(couleur):
        return fen1.winfo_rgb(couleur)
     
    def nom_cellule(nom):
        global canaux
        result = nom.cget("text")
    #    print(result,code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255)
        canaux = ("%.2f,%.2f,%.2f" %(code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255))
        txt1 = Label(fen1, text =canaux)
        txt1.grid(row=4, column=7, sticky ='NESW')
        return(canaux)
     
    def coul():
        fen2 = Toplevel()
        r = 0
        c = 0
        for color in COLORS:
            couleur = Button(fen2, text=color,  width = 13, height = 1, bg=color,\
            font=("Times", FONT_SIZE, "bold"))
            couleur.config(command=lambda nom=couleur: nom_cellule(nom))
            couleur.grid(row=r, column=c, padx=2, pady=2, sticky="NESW")
            r += 1
            if r > MAX_ROWS:
                r = 0
                c += 1
     
     
    Button(fen1,text='Couleurs',command=coul).grid(row=5, column=6, sticky='NESW')
     
     
    def bordure(canaux):
        canaux_bis = canaux*10
        print(canaux_bis)
     
     
    Bord=Label(fen1, text=" Bordure ")
    Bord.grid(row=4, column=1, sticky='NESW')
    val_bord = IntVar()
    val_bord.set(0)
    echelle_8 = Scale(fen1,length=200, orient=HORIZONTAL, troughcolor ='LightYellow2', \
    sliderlength =20, showvalue =0,from_=0,to=50, resolution=5, tickinterval=5, \
    command=lambda canaux=(0,0,0): bordure) # width=10
    echelle_8.set(0),
    echelle_8.grid(row=4, column=3, columnspan=4, sticky='NESW')
     
    Button(fen1,text='Quitter',command=fen1.destroy).grid(row=5, column=4,columnspan=2, sticky='NESW')
     
     
    fen1.mainloop()
    Je ne comprends par exemple pourquoi canaux_bis ne s'affiche pas.
    Mon besoin est autre mais je pense que si je résous ceci, je pourrai continuer.
    Pas d'aide par mp.

  6. #6
    Invité
    Invité(e)
    Par défaut
    J'ai cherché à comprendre un peu et j'ai ajouté (canaux) en souligné.
    En même temps çà me fait réfléchir sur un problème donné, et non pas à découvrir.
    Désolé si j'ai créé un gros bug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    echelle_8 = Scale(fen1,length=200, orient=HORIZONTAL, troughcolor ='LightYellow2', \
    sliderlength =20, showvalue =0,from_=0,to=50, resolution=5, tickinterval=5, \
    command=lambda canaux=(0,0,0): bordure(canaux)) # width=10
    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
    from tkinter import Entry, Label, Tk, Scale, HORIZONTAL, Frame, Toplevel
    from tkinter import Canvas, PhotoImage, Button, StringVar, IntVar
     
     
    fen1 = Tk()
    fen1.title("Retouche photo")
    fen1.configure(bg = "ghost white")
    fen1.geometry("400x100")
     
    COLORS = ['snow', 'ghost white']
     
     
    MAX_ROWS = 2
    FONT_SIZE = 1
     
    def code_rgb(couleur):
        return fen1.winfo_rgb(couleur)
     
    def nom_cellule(nom):
        global canaux
        result = nom.cget("text")
    #    print(result,code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255)
        canaux = ("%.2f,%.2f,%.2f" %(code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255))
        txt1 = Label(fen1, text =canaux)
        txt1.grid(row=4, column=7, sticky ='NESW')
        print('nom_cellule',canaux)
        return(canaux)
     
    def coul():
        fen2 = Toplevel()
        r = 0
        c = 0
        for color in COLORS:
            couleur = Button(fen2, text=color,  width = 13, height = 1, bg=color,\
            font=("Times", FONT_SIZE, "bold"))
            couleur.config(command=lambda nom=couleur: nom_cellule(nom))
            couleur.grid(row=r, column=c, padx=2, pady=2, sticky="NESW")
            r += 1
            if r > MAX_ROWS:
                r = 0
                c += 1
            print('coul',coul)
     
     
    Button(fen1,text='Couleurs',command=coul).grid(row=5, column=6, sticky='NESW')
     
     
    def bordure(canaux):
        canaux_bis = canaux*10
        print('canaux_bis',canaux_bis)
     
     
    Bord=Label(fen1, text=" Bordure ")
    Bord.grid(row=4, column=1, sticky='NESW')
    val_bord = IntVar()
    val_bord.set(0)
    echelle_8 = Scale(fen1,length=200, orient=HORIZONTAL, troughcolor ='LightYellow2', \
    sliderlength =20, showvalue =0,from_=0,to=50, resolution=5, tickinterval=5, \
    command=lambda canaux=(0,0,0): bordure(canaux)) # width=10
    echelle_8.set(0)
    echelle_8.grid(row=4, column=3, columnspan=4, sticky='NESW')
     
    Button(fen1,text='Quitter',command=fen1.destroy).grid(row=5, column=4,columnspan=2, sticky='NESW')
     
     
    fen1.mainloop()

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

    Citation Envoyé par marco056 Voir le message
    Je ne comprends par exemple pourquoi canaux_bis ne s'affiche pas.
    Mon besoin est autre mais je pense que si je résous ceci, je pourrai continuer.
    Votre code fait mal aux yeux.... Simplifiez.
    Pour le pb., revisitez la déclaration du lambda dans "command=lambda canaux=(0,0,0): bordure".

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

  8. #8
    Invité
    Invité(e)
    Par défaut
    Encore une chose, puis après j'arrête promis
    À moins que,,, le curseur sert à changer des couleurs, mais lesquelles ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MAX_ROWS = 1    # Changé la valeur car COLORS = (0,1)
    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
    from tkinter import Entry, Label, Tk, Scale, HORIZONTAL, Frame, Toplevel
    from tkinter import Canvas, PhotoImage, Button, StringVar, IntVar
     
    fen1 = Tk()
    fen1.title("Retouche photo")
    fen1.configure(bg = "ghost white")
    fen1.geometry("400x100")
     
    COLORS = ['snow', 'ghost white']
     
    MAX_ROWS = 1    # Changé la valeur car COLORS = (0,1)
    FONT_SIZE = 8   #...
     
    def code_rgb(couleur):
        return fen1.winfo_rgb(couleur)
     
    def nom_cellule(nom):
        global canaux
        result = nom.cget("text")
    #    print(result,code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255)
        canaux = ("%.2f,%.2f,%.2f" %(code_rgb(result)[0]/255,code_rgb(result)[1]/255,code_rgb(result)[2]/255))
        txt1 = Label(fen1, text =canaux)
        txt1.grid(row=4, column=7, sticky ='NESW')
        print('nom_cellule',canaux)
        return(canaux)
     
    def coul():
        fen2 = Toplevel()
        r = 0
        c = 0
        for color in COLORS:
            couleur = Button(fen2, text=color,  width = 13, height = 2, bg=color,\
            font=("Times", FONT_SIZE, "bold"))
            couleur.config(command=lambda nom=couleur: nom_cellule(nom))
            couleur.grid(row=r, column=c, padx=2, pady=2, sticky="NESW")
            r += 1
            if r > MAX_ROWS:
                r = 0
                c += 1
            print('coul',color)
     
     
    Button(fen1,text='Couleurs',command=coul).grid(row=5, column=6, sticky='NESW')
     
     
    def bordure(canaux):
        canaux_bis = canaux*10
        print('canaux_bis',canaux_bis)
     
     
    Bord=Label(fen1, text=" Bordure ")
    Bord.grid(row=4, column=1, sticky='NESW')
    val_bord = IntVar()
    val_bord.set(0)
    echelle_8 = Scale(fen1,length=200, orient=HORIZONTAL, troughcolor ='LightYellow2', \
    sliderlength =20, showvalue =0,from_=0,to=50, resolution=5, tickinterval=5, \
    command=lambda canaux=(0,0,0): bordure(canaux)) # width=10
    echelle_8.set(0)
    echelle_8.grid(row=4, column=3, columnspan=4, sticky='NESW')
     
    Button(fen1,text='Quitter',command=fen1.destroy).grid(row=5, column=4,columnspan=2, sticky='NESW')
     
     
    fen1.mainloop()
    J'ai encore vu autre chose, l'opération "r+=1" après la condition "if r > MAX_ROWS:"
    Pour permettre de faire le tour des traitements, avant de passer au suivant...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    def coul():
        fen2 = Toplevel()
        r = 0
        c = 0
        for color in COLORS:
            couleur = Button(fen2, text=color,  width = 13, height = 2, bg=color,\
            font=("Times", FONT_SIZE, "bold"))
            couleur.config(command=lambda nom=couleur: nom_cellule(nom))
            couleur.grid(row=r, column=c, padx=2, pady=2, sticky="NESW")
            if r > MAX_ROWS:
                r = 0
                c += 1
            r += 1
    Dernière modification par Invité ; 12/05/2016 à 19h19.

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Merci à tous les deux.
    Effectivement, wiztricks, j'avais fait de grosses bourdes.
    Il en reste sans doute, je débute en tkinter...
    Je vais me replonger dans les tutos ce week-end.

    Je crois avoir résolu à peu près mon souci.
    Je souhaitais en gros faire cela :
    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
    from tkinter import Entry, Label, Tk, Scale, HORIZONTAL, Frame, Toplevel
    from tkinter import Canvas, PhotoImage, Button, StringVar, IntVar
     
     
    fen1 = Tk()
    fen1.title("Retouche photo")
    fen1.configure(bg = "ghost white")
    fen1.geometry("700x400")
     
    COLORS = ['snow', 'ghost white', 'white smoke', 'gainsboro', 'floral white', 'old lace',
              'linen', 'antique white', 'papaya whip', 'blanched almond', 'bisque', 'peach puff']
     
     
    MAX_ROWS = 2
    FONT_SIZE = 1
     
    def code_rgb(couleur):
        return fen1.winfo_rgb(couleur)
     
    def nom_cellule(nom):
        global canaux
        result = nom.cget("text")
        canaux = (code_rgb(result))
        txt1 = Label(fen1, text =canaux)
        txt1.grid(row=4, column=7, sticky ='NESW')
        return(canaux)
     
    def coul():
        fen2 = Toplevel()
        r = 0
        c = 0
        for color in COLORS:
            couleur = Button(fen2, text=color,  width = 20, height = 20, bg=color,\
            font=("Times", FONT_SIZE, "bold"))
            couleur.config(command=lambda nom=couleur: nom_cellule(nom))
            couleur.grid(row=r, column=c, padx=2, pady=2, sticky="NESW")
            r += 1
            if r > MAX_ROWS:
                r = 0
                c += 1
     
    def traite():
        print(round(canaux[0]/256),round(canaux[1]/256),round(canaux[2]/256))
     
    Bord=Button(fen1, text=" Bordure ",command=traite)
    Bord.grid(row=4, column=1, sticky='NESW')
    echelle_8 = Scale(fen1,length=200, orient=HORIZONTAL, troughcolor ='LightYellow2', \
    sliderlength =20, showvalue =0,from_=0,to=50, resolution=5, tickinterval=5)
    echelle_8.grid(row=4, column=3, columnspan=4, sticky='NESW')
     
    Button(fen1,text='Couleurs',command=coul).grid(row=5, column=6, sticky='NESW')
    Button(fen1,text='Quitter',command=fen1.destroy).grid(row=5, column=4, sticky='NESW')
     
     
    fen1.mainloop()
    A améliorer sans doute mais je vais tenter de l'adapter à mon gros programme pour l'instant.
    Pas d'aide par mp.

Discussions similaires

  1. Réponses: 7
    Dernier message: 06/11/2014, 15h14
  2. valeurs rgb d'une image indexée
    Par amal1410 dans le forum Images
    Réponses: 5
    Dernier message: 04/08/2013, 16h29
  3. Valeurs RVB d'une couleur donnée
    Par Carole73 dans le forum Traitement d'images
    Réponses: 3
    Dernier message: 14/10/2012, 14h52
  4. les valeurs RGb d'une image
    Par lifemimi dans le forum Images
    Réponses: 1
    Dernier message: 29/04/2012, 10h01
  5. code RGB d'une couleur
    Par *alexandre* dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 15/01/2008, 16h48

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