93 votes

Générer une couleur hexagonale aléatoire en Python

Dans une application Django, une couleur est attribuée à chaque "membre" pour l'aider à s'identifier. Cette couleur est stockée dans la base de données, puis imprimée/copiée dans le code HTML lorsque cela est nécessaire. Le seul problème est que je ne sais pas comment générer des couleurs aléatoires. Hex couleurs en python/django. Il est assez facile de générer des couleurs RVB, mais pour les stocker, je devrais soit a) créer trois colonnes supplémentaires dans mon modèle "Membre", soit b) les stocker toutes dans la même colonne et utiliser des virgules pour les séparer, puis, plus tard, analyser les couleurs pour le HTML. Aucune de ces solutions n'est très attrayante, donc, encore une fois, je me demande comment générer des couleurs aléatoires. Hex couleurs en python/django.

4voto

Keith Randall Points 17518

Il suffit de les stocker sous la forme d'un nombre entier avec les trois canaux à des décalages de bits différents (comme ils sont souvent stockés en mémoire) :

value = (red << 16) + (green << 8) + blue

(Si chaque canal est compris entre 0 et 255). Enregistrez ce nombre entier dans la base de données et effectuez l'opération inverse lorsque vous devez revenir aux canaux distincts.

4voto

import random

def hex_code_colors():
    a = hex(random.randrange(0,256))
    b = hex(random.randrange(0,256))
    c = hex(random.randrange(0,256))
    a = a[2:]
    b = b[2:]
    c = c[2:]
    if len(a)<2:
        a = "0" + a
    if len(b)<2:
        b = "0" + b
    if len(c)<2:
        c = "0" + c
    z = a + b + c
    return "#" + z.upper()

3voto

endorpheus Points 41

Il y a tant de façons de procéder, que voici une démonstration utilisant " colorutils ".

pip install colorutils

Il est possible de générer des valeurs aléatoires en (RGB, HEX, WEB, YIQ, HSV).

# docs and downloads at 
# https://pypi.python.org/pypi/colorutils/

from colorutils import random_web
from tkinter import Tk, Button

mgui = Tk()
mgui.geometry('150x28+400+200')

def rcolor():
    rn = random_web()
    print(rn)  # for terminal watchers
    cbutton.config(text=rn)
    mgui.config(bg=rn)

cbutton = Button(text="Click", command=rcolor)
cbutton.pack()

mgui.mainloop()

J'espère que cela vous a été utile.

3voto

byteface Points 61
import secrets

# generate 4 sets of 2-digit hex chars for a color with transparency
rgba = f"#{secrets.token_hex(4)}" # example return: "#ffff0000"

# generate 3 sets of 2-digit hex chars for a non-alpha color
rgb = f"#{secrets.token_hex(3)}" # example return: "#ab12ce"

2voto

Sevalad Points 59
import random

def generate_color():
    color = '#{:02x}{:02x}{:02x}'.format(*map(lambda x: random.randint(0, 255), range(3)))
    return color

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X