#! /usr/bin/env python # ---------------------- # Color Chooser.pyw # ---------------------- # This is a simple color chooser that shows you the hexadecimal code # and the RGB code for a color # ---------------------- # By PyMike # Created on February 11, 2008 in 15 minutes # ---------------------- # This just is used for starting with a random color import random # Import pygame for drawing import pygame from pygame.locals import * #This is the script that converts to HTML notation def RGBToHTMLColor(rgb_tuple): hexcolor = '#%02x%02x%02x' % rgb_tuple return hexcolor def RGBToOpenGLColor(rgb_tuple): return "(%f,%f,%f)" % (rgb_tuple[0]/255.0, rgb_tuple[1]/255.0, rgb_tuple[2]/255.0) #A simple slider class Slider(object): #Constructs the object def __init__(self, pos, value=0): self.pos = pos self.bar = pygame.Surface((275, 15)) self.bar.fill((200, 200, 200)) self.slider = pygame.Surface((20, 15)) self.slider.fill((230, 230, 230)) pygame.draw.rect(self.bar, (0, 0, 0), (0, 0, 275, 15), 2) pygame.draw.rect(self.slider, (0, 0, 0), (-1, -1, 20, 15), 2) self.slider.set_at((19, 14), (0, 0, 0)) self.brect = self.bar.get_rect(topleft = pos) self.srect = self.slider.get_rect(topleft = pos) self.srect.left = value+pos[0] self.clicked = False self.value = value #Called once every frame def update(self): mousebutton = pygame.mouse.get_pressed() cursor = Rect(pygame.mouse.get_pos()[0], pygame.mouse.get_pos()[1], 1, 1) if cursor.colliderect(self.brect): if mousebutton[0]: self.clicked = True else: self.clicked = False if not mousebutton[0]: self.clicked = False if self.clicked: self.srect.center = cursor.center self.srect.clamp_ip(self.brect) self.value = self.srect.left - self.brect.left #Draws the slider def render(self, surface): surface.blit(self.bar, self.brect) surface.blit(self.slider, self.srect) #Main script that runs everything def main(): #Initialise pygame and set up the screen pygame.init() pygame.display.set_caption("Color Chooser - PyMike 2008") screen = pygame.display.set_mode((320, 320)) #Create a random RGB color r=random.randrange(0,255) g=random.randrange(0,255) b=random.randrange(0,255) #Create the sliders (s1 = red, s2 = green, s3 = blue) s1 = Slider((35, 200), r) s2 = Slider((35, 220), g) s3 = Slider((35, 240), b) #Use a font for drawing text font = pygame.font.SysFont("Times New Roman", 15) #Mainloop while 1: #Let's not overload the CPU pygame.time.wait(20) #Get input for e in pygame.event.get(): if e.type == QUIT: pygame.quit() return if e.type == KEYDOWN and e.key == K_c: key = pygame.key.get_pressed() if key[K_LCTRL]: pygame.scrap.init() pygame.scrap.set_mode(SCRAP_CLIPBOARD) pygame.scrap.put(SCRAP_TEXT, str(RGBToHTMLColor((r,g,b)))) #Update the sliders s1.update() s2.update() s3.update() #Update the color values r,g,b=s1.value,s2.value,s3.value #Draw everything screen.fill((240, 240, 240)) s1.render(screen) s2.render(screen) s3.render(screen) screen.fill((r,g,b),(160-96/2, 20, 96, 96)) ren = font.render("RGB: (%s, %s, %s)" % (r,g,b),1,(0,0,0)) screen.blit(ren, (160-ren.get_width()/2, 130)) ren = font.render("Hex: %s" % RGBToHTMLColor((r,g,b)),1,(0,0,0)) screen.blit(ren, (160-ren.get_width()/2, 150)) ren = font.render("OpenGL: %s" % RGBToOpenGLColor((r,g,b)),1,(0,0,0)) screen.blit(ren, (160-ren.get_width()/2, 170)) ren = font.render("R:",1,(0,0,0)) screen.blit(ren, (15, 200)) ren = font.render("G:",1,(0,0,0)) screen.blit(ren, (15, 220)) ren = font.render("B:",1,(0,0,0)) screen.blit(ren, (15, 240)) pygame.display.flip() #Run if executed if __name__ == '__main__': main()