Topic: [Risolto] Elenco nomi dei colori in tkinter  (Letto 61 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
[Risolto] Elenco nomi dei colori in tkinter
« il: Dicembre 03, 2019, 18:28 »
Signori, buona sera

Mi è venuto in mente di fare una dialog di selezione colori in tkinter basata sui nomi dei colori riconosciuti da tkinter e sto facendo qualche esperimento in merito.

La prima prova che mi è venuta in mente, è di popolare la finestra con una serie di label con assegnato il colore tramite il color-name (pessima idea, tempi biblici, troverò qualche altro modo).
Pur avendo trovato i nomi dei colori nella docs in questa pagina, data la pigrizia, ho pensato bene di andarmi a leggeri i nomi dei colori nel file "rgb.txt" di X11, in fondo quei nomi in tkinter si basano su X, applicandoli alle label, ne sono stati riconosciuti 751 su 753, contro i 760 presenti nel documento citato (colori mac e windows esclusi)

Ora, è banale che quei nomi di colore siano memorizzati da qualche parte in tkinter, dato che vengono riconosciuti.
Volendo evitare di scriverli nel codice e/o in un file (che comunque possiedo) ho cercato un metodo od una variabile che li contenga, tanto nella docs quanto leggendo direttamente il sorgente python delle tkinter, non cavandone un ragno dal buco e senza schiarirmi le idee (solo il vago sospetto siano nei binari).

Conoscete un metodo per "estrarre" l'elenco dei nomi di colore o, almeno, come stanno le cose?

Grazie dell'attenzione, ciao.
« Ultima modifica: Dicembre 04, 2019, 04:58 da nuzzopippo »

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.886
  • Punti reputazione: 9
    • Mostra profilo
Re:Elenco nomi dei colori in tkinter
« Risposta #1 il: Dicembre 03, 2019, 22:49 »
La tua domanda:
> quei nomi di colore siano memorizzati da qualche parte in tkinter

La risposta alla tua domanda:
>  ho pensato bene di andarmi a leggeri i nomi dei colori nel file "rgb.txt" di X11

e del resto, questo mi sembra chiaro https://effbot.org/tkinterbook/tkinter-widget-styling.htm#color-names

Quindi, non ti resta che parsare quel file, direi...

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
Re:Elenco nomi dei colori in tkinter
« Risposta #2 il: Dicembre 04, 2019, 04:56 »
e del resto, questo mi sembra chiaro https://effbot.org/tkinterbook/tkinter-widget-styling.htm#color-names

Si, è chiarissimo, non l'avevo letto, ho cercato nei posti sbagliati,

Quindi, non ti resta che parsare quel file, direi...

Cosa che ho in effetti fatto ... Grazie @RicPol

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.886
  • Punti reputazione: 9
    • Mostra profilo
Re:[Risolto] Elenco nomi dei colori in tkinter
« Risposta #3 il: Dicembre 04, 2019, 09:00 »
oh, poi capiamoci... il fatto che tkinter non ritenga necessario esporre questa lista in una api stabile e ragionevole e magari perché no cross-platform (io quel file sul mio windows ovviamente non ce l'ho)... vabbè, ma di che stiamo a parlare. Il fatto che si possa pensare di usare tkinter per fare gui app, nel 2019...  :thinking:

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
Re:[Risolto] Elenco nomi dei colori in tkinter
« Risposta #4 il: Dicembre 04, 2019, 10:08 »
oh, poi capiamoci... il fatto che tkinter non ritenga necessario esporre questa lista in una api stabile e ragionevole e magari perché no cross-platform (io quel file sul mio windows ovviamente non ce l'ho)...

... beh, non è che serva a molto ma ho i nomi della versione 8.4 di tkinter, nel fine settimana provvederò ad organizzarli in lista ed esporli qui in un post successivo, potrebbe darsi a vengano utili a qualcuno e mi costa poco e, comunque, me li conservo in un modulo di utilità che uso alla bisogna.

vabbè, ma di che stiamo a parlare. Il fatto che si possa pensare di usare tkinter per fare gui app, nel 2019...  :thinking:

Su questo non posso che darTi ragione, a parte qualche occorrenza occasionale (quanto  su serve per completare un discorso iniziato tempo fa) non mi sognerei di usare tkinter per interfacce "complesse", non che sia impossibile ma lo vedo poco "reattivo", anche se molto è dovuto a mia imperizia e scarsa conoscenza.

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
Re:[Risolto] Elenco nomi dei colori in tkinter
« Risposta #5 il: Dicembre 05, 2019, 17:20 »
Pur rendendomi conto che non sia un argomento al top degli interessi, come anticipato nel precedente post, approfittando di una insonnia, ho codificato una lista con tutti il 760 nomi colori presente nella pagina di documentazione della versione 8.4 di tkinter, la rendo disponibile nel caso vi sia qualche eventuale interessato.
Sono 152 righe entro i 79 caratteri.

colors = ['alice blue', 'AliceBlue', 'antique white', 'AntiqueWhite', 
          'AntiqueWhite1', 'AntiqueWhite2', 'AntiqueWhite3', 'AntiqueWhite4',
          'agua', 'aquamarine', 'aquamarine1', 'aquamarine2', 'aquamarine3',
          'aquamarine4', 'azure', 'azure1', 'azure2', 'azure3', 'azure4',
          'beige', 'bisque', 'bisque1', 'bisque2', 'bisque3', 'bisque4',
          'black', 'blanched almond', 'BlanchedAlmond', 'blue', 'blue violet',
          'blue1', 'blue2', 'blue3', 'blue4', 'BlueViolet', 'brown', 'brown1',
          'brown2', 'brown3', 'brown4', 'burlywood', 'burlywood1',
          'burlywood2', 'burlywood3', 'burlywood4', 'cadet blue', 'CadetBlue',
          'CadetBlue1', 'CadetBlue2', 'CadetBlue3', 'CadetBlue4', 'chartreuse',
          'chartreuse1', 'chartreuse2', 'chartreuse3', 'chartreuse4',
          'chocolate', 'chocolate1', 'chocolate2', 'chocolate3', 'chocolate4',
          'coral', 'coral1', 'coral2', 'coral3', 'coral4', 'cornflower blue',
          'CornflowerBlue', 'cornsilk', 'cornsilk1', 'cornsilk2', 'cornsilk3',
          'cornsilk4', 'crymson', 'cyan', 'cyan1', 'cyan2', 'cyan3', 'cyan4',
          'dark blue', 'dark cyan', 'dark goldenrod', 'dark gray',
          'dark green', 'dark grey', 'dark khaki', 'dark magenta',
          'dark olive green', 'dark orange', 'dark orchid', 'dark red',
          'dark salmon', 'dark sea green', 'dark slate blue',
          'dark slate gray', 'dark slate grey', 'dark turquoise',
          'dark violet', 'DarkBlue', 'DarkCyan', 'DarkGoldenrod',
          'DarkGoldenrod1', 'DarkGoldenrod2', 'DarkGoldenrod3',
          'DarkGoldenrod4', 'DarkGray', 'DarkGreen', 'DarkGrey', 'DarkKhaki',
          'DarkMagenta', 'DarkOliveGreen', 'DarkOliveGreen1',
          'DarkOliveGreen2', 'DarkOliveGreen3', 'DarkOliveGreen4',
          'DarkOrange', 'DarkOrange1', 'DarkOrange2', 'DarkOrange3',
          'DarkOrange4', 'DarkOrchid', 'DarkOrchid1', 'DarkOrchid2',
          'DarkOrchid3', 'DarkOrchid4', 'DarkRed', 'DarkSalmon',
          'DarkSeaGreen', 'DarkSeaGreen1', 'DarkSeaGreen2', 'DarkSeaGreen3',
          'DarkSeaGreen4', 'DarkSlateBlue', 'DarkSlateGray', 'DarkSlateGray1',
          'DarkSlateGray2', 'DarkSlateGray3', 'DarkSlateGray4',
          'DarkSlateGrey', 'DarkTurquoise', 'DarkViolet', 'deep pink',
          'deep sky blue', 'DeepPink', 'DeepPink1', 'DeepPink2', 'DeepPink3',
          'DeepPink4', 'DeepSkyBlue', 'DeepSkyBlue1', 'DeepSkyBlue2',
          'DeepSkyBlue3', 'DeepSkyBlue4', 'dim gray', 'dim grey', 'DimGray',
          'DimGrey', 'dodger blue', 'DodgerBlue', 'DodgerBlue1', 'DodgerBlue2',
          'DodgerBlue3', 'DodgerBlue4', 'firebrick', 'firebrick1',
          'firebrick2', 'firebrick3', 'firebrick4', 'floral white',
          'FloralWhite', 'forest green', 'ForestGreen', 'fuchsia', 'gainsboro',
          'ghost white', 'GhostWhite', 'gold', 'gold1', 'gold2', 'gold3',
          'gold4', 'goldenrod', 'goldenrod1', 'goldenrod2', 'goldenrod3',
          'goldenrod4', 'gray', 'gray0', 'gray1', 'gray2', 'gray3', 'gray4',
          'gray5', 'gray6', 'gray7', 'gray8', 'gray9', 'gray10', 'gray11',
          'gray12', 'gray13', 'gray14', 'gray15', 'gray16', 'gray17', 'gray18',
          'gray19', 'gray20', 'gray21', 'gray22', 'gray23', 'gray24', 'gray25',
          'gray26', 'gray27', 'gray28', 'gray29', 'gray30', 'gray31', 'gray32',
          'gray33', 'gray34', 'gray35', 'gray36', 'gray37', 'gray38', 'gray39',
          'gray40', 'gray41', 'gray42', 'gray43', 'gray44', 'gray45', 'gray46',
          'gray47', 'gray48', 'gray49', 'gray50', 'gray51', 'gray52', 'gray53',
          'gray54', 'gray55', 'gray56', 'gray57', 'gray58', 'gray59', 'gray60',
          'gray61', 'gray62', 'gray63', 'gray64', 'gray65', 'gray66', 'gray67',
          'gray68', 'gray69', 'gray70', 'gray71', 'gray72', 'gray73', 'gray74',
          'gray75', 'gray76', 'gray77', 'gray78', 'gray79', 'gray80', 'gray81',
          'gray82', 'gray83', 'gray84', 'gray85', 'gray86', 'gray87', 'gray88',
          'gray89', 'gray90', 'gray91', 'gray92', 'gray93', 'gray94', 'gray95',
          'gray96', 'gray97', 'gray98', 'gray99', 'gray100', 'green',
          'green yellow', 'green1', 'green2', 'green3', 'green4',
          'GreenYellow', 'grey', 'grey0', 'grey1', 'grey2', 'grey3', 'grey4',
          'grey5', 'grey6', 'grey7', 'grey8', 'grey9', 'grey10', 'grey11',
          'grey12', 'grey13', 'grey14', 'grey15', 'grey16', 'grey17', 'grey18',
          'grey19', 'grey20', 'grey21', 'grey22', 'grey23', 'grey24', 'grey25',
          'grey26', 'grey27', 'grey28', 'grey29', 'grey30', 'grey31', 'grey32',
          'grey33', 'grey34', 'grey35', 'grey36', 'grey37', 'grey38', 'grey39',
          'grey40', 'grey41', 'grey42', 'grey43', 'grey44', 'grey45', 'grey46',
          'grey47', 'grey48', 'grey49', 'grey50', 'grey51', 'grey52', 'grey53',
          'grey54', 'grey55', 'grey56', 'grey57', 'grey58', 'grey59', 'grey60',
          'grey61', 'grey62', 'grey63', 'grey64', 'grey65', 'grey66', 'grey67',
          'grey68', 'grey69', 'grey70', 'grey71', 'grey72', 'grey73', 'grey74',
          'grey75', 'grey76', 'grey77', 'grey78', 'grey79', 'grey80', 'grey81',
          'grey82', 'grey83', 'grey84', 'grey85', 'grey86', 'grey87', 'grey88',
          'grey89', 'grey90', 'grey91', 'grey92', 'grey93', 'grey94', 'grey95',
          'grey96', 'grey97', 'grey98', 'grey99', 'grey100', 'honeydew',
          'honeydew1', 'honeydew2', 'honeydew3', 'honeydew4', 'hot pink',
          'HotPink', 'HotPink1', 'HotPink2', 'HotPink3', 'HotPink4',
          'indian red', 'IndianRed', 'IndianRed1', 'IndianRed2', 'IndianRed3',
          'IndianRed4', 'indigo', 'ivory', 'ivory1', 'ivory2', 'ivory3',
          'ivory4', 'khaki', 'khaki1', 'khaki2', 'khaki3', 'khaki4',
          'lavender', 'lavender blush', 'LavenderBlush', 'LavenderBlush1',
          'LavenderBlush2', 'LavenderBlush3', 'LavenderBlush4', 'lawn green',
          'LawnGreen', 'lemon chiffon', 'LemonChiffon', 'LemonChiffon1',
          'LemonChiffon2', 'LemonChiffon3', 'LemonChiffon4', 'light blue',
          'light coral', 'light cyan', 'light goldenrod',
          'light goldenrod yellow', 'light gray', 'light green', 'light grey',
          'light pink', 'light salmon', 'light sea green', 'light sky blue',
          'light slate blue', 'light slate gray', 'light slate grey',
          'light steel blue', 'light yellow', 'LightBlue', 'LightBlue1',
          'LightBlue2', 'LightBlue3', 'LightBlue4', 'LightCoral', 'LightCyan',
          'LightCyan1', 'LightCyan2', 'LightCyan3', 'LightCyan4',
          'LightGoldenrod', 'LightGoldenrod1', 'LightGoldenrod2',
          'LightGoldenrod3', 'LightGoldenrod4', 'LightGoldenrodYellow',
          'LightGray', 'LightGreen', 'LightGrey', 'LightPink', 'LightPink1',
          'LightPink2', 'LightPink3', 'LightPink4', 'LightSalmon',
          'LightSalmon1', 'LightSalmon2', 'LightSalmon3', 'LightSalmon4',
          'LightSeaGreen', 'LightSkyBlue', 'LightSkyBlue1', 'LightSkyBlue2',
          'LightSkyBlue3', 'LightSkyBlue4', 'LightSlateBlue', 'LightSlateGray',
          'LightSlateGrey', 'LightSteelBlue', 'LightSteelBlue1',
          'LightSteelBlue2', 'LightSteelBlue3', 'LightSteelBlue4',
          'LightYellow', 'LightYellow1', 'LightYellow2', 'LightYellow3',
          'LightYellow4', 'lime', 'lime green', 'LimeGreen', 'linen',
          'magenta', 'magenta1', 'magenta2', 'magenta3', 'magenta4', 'maroon',
          'maroon1', 'maroon2', 'maroon3', 'maroon4', 'medium aquamarine',
          'medium blue', 'medium orchid', 'medium purple', 'medium sea green',
          'medium slate blue', 'medium spring green', 'medium turquoise',
          'medium violet red', 'MediumAquamarine', 'MediumBlue',
          'MediumOrchid', 'MediumOrchid1', 'MediumOrchid2', 'MediumOrchid3',
          'MediumOrchid4', 'MediumPurple', 'MediumPurple1', 'MediumPurple2',
          'MediumPurple3', 'MediumPurple4', 'MediumSeaGreen',
          'MediumSlateBlue', 'MediumSpringGreen', 'MediumTurquoise',
          'MediumVioletRed', 'midnight blue', 'MidnightBlue', 'mint cream',
          'MintCream', 'misty rose', 'MistyRose', 'MistyRose1', 'MistyRose2',
          'MistyRose3', 'MistyRose4', 'moccasin', 'navajo white',
          'NavajoWhite', 'NavajoWhite1', 'NavajoWhite2', 'NavajoWhite3',
          'NavajoWhite4', 'navy', 'navy blue', 'NavyBlue', 'old lace',
          'OldLace', 'olive', 'olive drab', 'OliveDrab', 'OliveDrab1',
          'OliveDrab2', 'OliveDrab3', 'OliveDrab4', 'orange', 'orange red',
          'orange1', 'orange2', 'orange3', 'orange4', 'OrangeRed',
          'OrangeRed1', 'OrangeRed2', 'OrangeRed3', 'OrangeRed4', 'orchid',
          'orchid1', 'orchid2', 'orchid3', 'orchid4', 'pale goldenrod',
          'pale green', 'pale turquoise', 'pale violet red', 'PaleGoldenrod',
          'PaleGreen', 'PaleGreen1', 'PaleGreen2', 'PaleGreen3', 'PaleGreen4',
          'PaleTurquoise', 'PaleTurquoise1', 'PaleTurquoise2',
          'PaleTurquoise3', 'PaleTurquoise4', 'PaleVioletRed',
          'PaleVioletRed1', 'PaleVioletRed2', 'PaleVioletRed3',
          'PaleVioletRed4', 'papaya whip', 'PapayaWhip', 'peach puff',
          'PeachPuff', 'PeachPuff1', 'PeachPuff2', 'PeachPuff3', 'PeachPuff4',
          'peru', 'pink', 'pink1', 'pink2', 'pink3', 'pink4', 'plum', 'plum1',
          'plum2', 'plum3', 'plum4', 'powder blue', 'PowderBlue', 'purple',
          'purple1', 'purple2', 'purple3', 'purple4', 'red', 'red1', 'red2',
          'red3', 'red4', 'rosy brown', 'RosyBrown', 'RosyBrown1',
          'RosyBrown2', 'RosyBrown3', 'RosyBrown4', 'royal blue', 'RoyalBlue',
          'RoyalBlue1', 'RoyalBlue2', 'RoyalBlue3', 'RoyalBlue4',
          'saddle brown', 'SaddleBrown', 'salmon', 'salmon1', 'salmon2',
          'salmon3', 'salmon4', 'sandy brown', 'SandyBrown', 'sea green',
          'SeaGreen', 'SeaGreen1', 'SeaGreen2', 'SeaGreen3', 'SeaGreen4',
          'seashell', 'seashell1', 'seashell2', 'seashell3', 'seashell4',
          'sienna', 'sienna1', 'sienna2', 'sienna3', 'sienna4', 'silver',
          'sky blue', 'SkyBlue', 'SkyBlue1', 'SkyBlue2', 'SkyBlue3',
          'SkyBlue4', 'slate blue', 'slate gray', 'slate grey', 'SlateBlue',
          'SlateBlue1', 'SlateBlue2', 'SlateBlue3', 'SlateBlue4', 'SlateGray',
          'SlateGray1', 'SlateGray2', 'SlateGray3', 'SlateGray4', 'SlateGrey',
          'snow', 'snow1', 'snow2', 'snow3', 'snow4', 'spring green',
          'SpringGreen', 'SpringGreen1', 'SpringGreen2', 'SpringGreen3',
          'SpringGreen4', 'steel blue', 'SteelBlue', 'SteelBlue1',
          'SteelBlue2', 'SteelBlue3', 'SteelBlue4', 'tan', 'tan1', 'tan2',
          'tan3', 'tan4', 'teal', 'thistle', 'thistle1', 'thistle2',
          'thistle3', 'thistle4', 'tomato', 'tomato1', 'tomato2', 'tomato3',
          'tomato4', 'turquoise', 'turquoise1', 'turquoise2', 'turquoise3',
          'turquoise4', 'violet', 'violet red', 'VioletRed', 'VioletRed1',
          'VioletRed2', 'VioletRed3', 'VioletRed4', 'wheat', 'wheat1',
          'wheat2', 'wheat3', 'wheat4', 'white', 'white smoke', 'WhiteSmoke',
          'yellow', 'yellow green', 'yellow1', 'yellow2', 'yellow3', 'yellow4',
          'YellowGreen', ]


Sul mio sistema (ubuntu 18.04 - python 3.6.9 con libreria tkinter di default) vengono riconosciuti 758 dei nomi di colore, scartati "agua" e "crymson" ... non saprei dire cosa succede con i sistemi windows, non avendo disponibili macchine con quel s.o.

Qualora un qualche utente con quel sistema sia interessato e volesse dare un feedback in proposito, metto in seguito un prototipo buttato li solo per testare, l'esposizione dei colori al momento, la lista sopra esposta è contenuta in file "lst_nomi.py" importata nel codice di test

# -*- coding : utf-8 -*-

import tkinter as tk
import lst_nomi as lc


class DefColors(tk.Toplevel):
    ''' Finestra dei colori da applicare basata sui color-names di tkinter. '''
    def __init__(self, master=None):
        super().__init__(master)
        self.title('Selezione dei colori')
        # blocco pannello dei colori
        c_colors = tk.Canvas(self, width=150, bg='black')
        c_colors.grid(row=0, column=0, stick='nsew')
        v_scroll = tk.Scrollbar(self)
        v_scroll.grid(row=0, column=1, sticky='ns')
        v_scroll['command'] = c_colors.yview
        c_colors['yscrollcommand'] = v_scroll.set
        right_p = tk.Frame(self, width=100, bg='red')
        right_p.grid(row=0, column=2, sticky='nsew', padx=4, pady=4)
        my_button = tk.Button(self, text='Chiudi finestra', command=self.destroy)
        my_button.grid(row=1, column=0, columnspan=3, sticky='nsew')
        self.grid_rowconfigure(0, weight=1)
        self.grid_columnconfigure(0, minsize=150)
        self.grid_columnconfigure(2, weight=1)
        self.minsize(300,300)
        self.maxsize(500,500)
        self.update()
        self.__populate_colors(c_colors)
   
    def __populate_colors(self, pan):
        colors = lc.colors
        print('In lavorazione', str(len(colors)), 'named-colors')
        if not colors:
            return
        row = 0
        posy = 0
        dim_x = pan.winfo_width()
        for color in colors:
            try:
                id = pan.create_rectangle((0, posy, dim_x, posy+15), fill=color)
                posy += 15
                # i bind dopo i test
                row += 1
            except:
                print(row, ' : ', color, '- scartato')
                pass
        pan.configure(scrollregion=(0, 0, dim_x, posy))
        print(str(row), 'colori accettati')
       
# test

if __name__ == '__main__':
    root = tk.Tk()
    w = DefColors(root)
    root.mainloop()
       

Offline RicPol

  • python sapiens sapiens
  • ******
  • Post: 2.886
  • Punti reputazione: 9
    • Mostra profilo
Re:[Risolto] Elenco nomi dei colori in tkinter
« Risposta #6 il: Dicembre 06, 2019, 10:54 »
Uhm, non è che proprio mai nessuno abbia mai pensato di fare una cosa del genere, eh  ;) http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter
In windows funziona, nel senso che i nomi dei colori sono hardcodati invece di stare in un file di testo, come dice la doc che ti ho linkato sopra... ma comunque i nomi sono sempre quelli.

Comunque tieni presente che la programmazione è come la torta... la cosa che può servire non è pubblicare la foto della torta già fatta ma la ricetta per fare la torta.
In questo caso, il codice per parsare il file di testo, non il risultato del parsing. Il file sorgente potenzialmente potrebbe essere aggiornato in futuro...

Offline nuzzopippo

  • python habilis
  • **
  • Post: 90
  • Punti reputazione: 0
    • Mostra profilo
Re:[Risolto] Elenco nomi dei colori in tkinter
« Risposta #7 il: Dicembre 06, 2019, 12:27 »
Uhm, non è che proprio mai nessuno abbia mai pensato di fare una cosa del genere, eh  ;) http://www.science.smith.edu/dftwiki/index.php/Color_Charts_for_TKinter
beh ... c'è qualcosa di diverso ma stiamo li :)

In windows funziona, nel senso che i nomi dei colori sono hardcodati invece di stare in un file di testo, come dice la doc che ti ho linkato sopra... ma comunque i nomi sono sempre quelli.
e questo, io non l'avrei potuto sapere ... prima o poi dovrò decidermi di installare una versione di windows, giusto per qualche prova.

Comunque tieni presente che la programmazione è come la torta... la cosa che può servire non è pubblicare la foto della torta già fatta ma la ricetta per fare la torta.
In questo caso, il codice per parsare il file di testo, non il risultato del parsing. Il file sorgente potenzialmente potrebbe essere aggiornato in futuro...
:D ... hai ragione, certo che suggerire il mio codice qui mi sembra di commettere un peccato di presunzione, comunque, eccolo
f_names = 'colori_docs_tkinter'

f = open(f_names, 'r')
data_rows = f.read().splitlines()
f.close()
print('data_rows : ', str(len(data_rows)), 'elementi')
colors = {}
counter = 0
for r in data_rows:
    d = r.split()
    value = {}
    value['rgb'] = (int(d[-3]), int(d[-2]), int(d[-1]))
    value['hex'] = '#%02x%02x%02x' % (int(d[-3]), int(d[-2]), int(d[-1]))
    name = ' '.join(d[:-3])
    colors[name] = value
    counter += 1
    if len(d[:-3]) > 1:
         print('%d - valutato' % counter, name)
print('rows : ', str(len(colors)), 'elementi')

f = open('vocab_colori.py', 'w')
stringa = 'colors = {'
f.write(stringa)
stringa = '          '
primariga = True
for key in colors.keys():
    if primariga:
        riga = ''
        primariga = False
    else:
        riga = stringa
    riga += "'"+key+"': {'rgb': ("+str(colors[key]["rgb"][0])+", "+str(colors[key]["rgb"][1])+", "+str(colors[key]["rgb"][2])+")"+", 'hex': '"+colors[key]["hex"]+"'},\n"
    f.write(riga)
f.write('}')
f.close()
         
f = open('lst_nomi.py', 'w')
riga = 'colors = ['
for key in colors.keys():
    if len(riga+"'" + key + "'") < 79:
        riga += "'" + key + "', "
    else:
        f.write(riga + '\n')
        riga = "          " + "'" + key +"', "
f.write(riga)
f.write(']')
f.close()

era uno script "al volo" per crearmi una lista ed un vocabolario dei colori, compresi i valori rgb ed esadecimali, "colori_docs_tkinter" è il file in cui avevo depositato i dati "munti" da uno script bash.

Ciao :)

[Edit] dimenticavo, i dati nel file sono formattati così :

bisque3 205 183 158
bisque4 139 125 107
black 0 0 0
blanched almond 255 235 205
BlanchedAlmond 255 235 205
blue 0 0 255
...
« Ultima modifica: Dicembre 06, 2019, 12:39 da nuzzopippo »