Seite 1 von 1

Farbe auswählen und Hexzahl anzeigen

Verfasst: Donnerstag 24. März 2005, 19:44
von Mawilo
Hallo,

da es mich immer genervt hat, die richtigen Farbeinstellungen herauszufinden, habe ich mir ein kleines Tool gebaut.
Da kann ich jetzt mit den Reglern die gewünschte Farbe einstellen, den Farbwert (z.B. '#8b5a4a') ablesen und ins Programm übernehmen.

Code: Alles auswählen

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

from Tkinter import *

class Farbschema:
    def __init__(self):
        self.root = Tk()
        self.fr1 = Frame(self.root)# Hauptframe
        self.fr1.pack()
        self.fr2 = Frame(self.fr1) # Frame für die Schieberegler
        self.fr2.pack()
        self.fr3 = Frame(self.fr1) # Frame für die Farbanzeige
        self.fr3.pack(fill=X)
        self.fr4 = Frame(self.fr1) # Frame für die Buttons
        self.fr4.pack()
        
        # Regler für die Farbe Rot #
        self.scale_r1 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              label='Farbanteil Rot:',
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_r1.pack()
        self.scale_r2 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_r2.pack()
        
        # Regler für die Farbe Grün #
        self.scale_g1 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              label='Farbanteil Grün:',
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_g1.pack()
        self.scale_g2 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_g2.pack()
        
        # Regler für die Farbe Blau #
        self.scale_b1 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              label='Farbanteil Blau:',
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_b1.pack()
        self.scale_b2 = Scale(self.fr2,length='6c',
                              from_=0,
                              to=15,
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige)
        self.scale_b2.pack()

        # Farblabel + Wertanzeige#
        self.lb1 = Label(self.fr3,height=4,bd=1,relief=GROOVE)
        self.lb1.pack(fill=X,padx=4,pady=4)
        self.lb2 = Label(self.fr3,bd=1,font=('arial',11,'bold'))
        self.lb2.pack(fill=X,padx=4,pady=4)

        # Button Beenden '
        self.bu = Button(self.fr4,text=' Beenden ',command=self.ende)
        self.bu.pack(padx=4,pady=4)
        
    def wert_r1(self):
        self.r1 = self.scale_r1.get()

    def wert_r2(self):
        self.r2 = self.scale_r2.get()

    def wert_g1(self):
        self.g1 = int(self.scale_g1.get())

    def wert_g2(self):
        self.g2 = int(self.scale_g2.get())
       
    def wert_b1(self):
        self.b1 = int(self.scale_b1.get())

    def wert_b2(self):
        self.b2 = int(self.scale_b2.get())
       

    def hexwert(self,zahl):
        if zahl < 10:
            z = zahl
        elif zahl == 10:
            z = 'a'
        elif zahl == 11:
            z = 'b'
        elif zahl == 12:
            z = 'c'
        elif zahl == 13:
            z = 'd'
        elif zahl == 14:
            z = 'e'
        elif zahl == 15:
            z = 'f'
        return z
        
    
    def anzeige(self,event):
        self.wert_r1()
        self.wert_r2()
        self.wert_g1()
        self.wert_g2()
        self.wert_b1()
        self.wert_b2()
        self.farbe = '%s%s%s%s%s%s'%(self.hexwert(self.r1),
                                     self.hexwert(self.r2),
                                     self.hexwert(self.g1),
                                     self.hexwert(self.g2),
                                     self.hexwert(self.b1),
                                     self.hexwert(self.b2))

        self.lb1.config(bg='#%s%s%s%s%s%s'%(self.hexwert(self.r1),
                                            self.hexwert(self.r2),
                                            self.hexwert(self.g1),
                                            self.hexwert(self.g2),
                                            self.hexwert(self.b1),
                                            self.hexwert(self.b2)))

        self.lb2.config(text='Angezeigte Farbe: #%s%s%s%s%s%s'%(self.hexwert(self.r1),
                                                                self.hexwert(self.r2),
                                                                self.hexwert(self.g1),
                                                                self.hexwert(self.g2),
                                                                self.hexwert(self.b1),
                                                                self.hexwert(self.b2)))

    def run(self):
        self.root.mainloop()

    def ende(self):
        self.root.destroy()


if __name__ == '__main__':
    Anwendung = Farbschema()
    Anwendung.run()
Das lässt sich ggf. auch eleganter erstellen - es erfüllt aber seinen Zweck. :D

Stephan

Verfasst: Donnerstag 24. März 2005, 20:33
von mawe
Hi!

Gefällt mir :)
Kleiner Verbesserungsvorschlag: def hexwert() kannst Du dir sparen, wenn Du die Farben so erzeugst:

Code: Alles auswählen

self.farbe = '%x%x%x%x%x%x'%(self.r1,self.r2,self.g1,self.g2,self.b1,self.b2)
Gruß, mawe

Verfasst: Donnerstag 24. März 2005, 21:06
von mawe
Habs ein wenig gekürzt:

Code: Alles auswählen

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

from Tkinter import *

class Farbschema:
    def __init__(self):
        root = Tk()
        fr1 = Frame(root)# Hauptframe
        fr1.pack()
        fr2 = Frame(fr1) # Frame für die Schieberegler
        fr2.pack()
        fr3 = Frame(fr1) # Frame für die Farbanzeige
        fr3.pack(fill=X)
        fr4 = Frame(fr1) # Frame für die Buttons
        fr4.pack()
      
        self.sliders = []
        for color in ["Rot","Gruen","Blau"]:
            self.sliders.append(Scale(fr2,length='6c',
                              from_=0,
                              to=15,
                              label='Farbanteil %s:' % color,
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige))
            self.sliders[-1].pack()
            self.sliders.append(Scale(fr2,length='6c',
                              from_=0,
                              to=15,
                              orient=HORIZONTAL,
                              showvalue=0,
                              command=self.anzeige))
            self.sliders[-1].pack()
       
        # Farblabel + Wertanzeige#
        self.lb1 = Label(fr3,height=4,bd=1,relief=GROOVE)
        self.lb1.pack(fill=X,padx=4,pady=4)
        self.lb2 = Label(fr3,bd=1,font=('arial',11,'bold'))
        self.lb2.pack(fill=X,padx=4,pady=4)

        # Button Beenden '
        Button(fr4,text=' Beenden ',command=root.quit).pack(padx=4,pady=4)

        root.mainloop()

    def anzeige(self,event):
        s = []
        for slider in self.sliders:
            s.append(int(slider.get()))
        self.lb1.config(bg='#%x%x%x%x%x%x'%(s[0],s[1],s[2],s[3],s[4],s[5]))
        self.lb2.config(text='Angezeigte Farbe: #%x%x%x%x%x%x'%(
            s[0],s[1],s[2],s[3],s[4],s[5]))


if __name__ == '__main__':
    Farbschema()
Gruß, mawe

Verfasst: Donnerstag 24. März 2005, 21:14
von Mawilo
Hi mawe,

wieder was gelernt - danke.
Die Angabe von '%x' kannte ich noch nicht.

Stephan