Farbe auswählen und Hexzahl anzeigen

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Donnerstag 24. März 2005, 19:44

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 24. März 2005, 20:33

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
mawe
Python-Forum Veteran
Beiträge: 1209
Registriert: Montag 29. September 2003, 17:18
Wohnort: Purkersdorf (bei Wien [Austria])

Donnerstag 24. März 2005, 21:06

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
Benutzeravatar
Mawilo
User
Beiträge: 446
Registriert: Sonntag 22. Februar 2004, 10:58
Wohnort: Sachsen
Kontaktdaten:

Donnerstag 24. März 2005, 21:14

Hi mawe,

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

Stephan
Antworten