#!/usr/local/bin/perl -w use strict; use diagnostics; use Tk; use Tk::Dialog; my $mw = MainWindow->new; $mw->geometry("500x225+400+400"); $mw->minsize(qw(500 225)); $mw->maxsize(qw(500 225)); $mw->title("Color Viewer"); my $leftFrm = $mw->Frame(-width => 250, -height => 225, -borderwidth => 2, -relief => 'sunken') ->pack(-side => 'left', -fill => 'y'); my $rightFrm = $mw->Frame(-width => 300, -height => 225, -borderwidth => 2, -relief => 'sunken') ->pack(-side => 'left'); my $redscale = $leftFrm->Scale(-label => 'Red (R)', -orient => 'horizontal', -from => 0, -to => 255, -width => 10, -sliderlength => 15, -length => 200, -foreground => 'red', -command => \&rgb2hex)->pack(-side => 'top'); my $greenscale = $leftFrm->Scale(-label => 'Green (G)', -orient => 'horizontal', -from => 0, -to => 255, -width => 10, -sliderlength => 15, -length => 200, -foreground => 'darkgreen', -command => \&rgb2hex)->pack(-side => 'top'); my $bluescale = $leftFrm->Scale(-label => 'Blue (B)', -orient => 'horizontal', -from => 0, -to => 255, -width => 10, -sliderlength => 15, -length => 200, -foreground => 'blue', -command => \&rgb2hex)->pack(-side => 'top'); my $hexLabel1 = $leftFrm->Label(-text => 'WWW Hex Code', -pady => 8) ->pack(-side => 'top'); my $leftFrm1 = $leftFrm->Frame->pack(-fill => 'x'); my $hexValueEnt = $leftFrm1->Entry(-width => 10) ->pack(-side => 'left', pady => 2, padx => 2); $hexValueEnt->insert(0, "#000000"); my $btnHexToRGB = $leftFrm1->Button(-text => 'Hex -> RGB', -activebackground => 'purple', -highlightbackground => 'purple', -command => \&hex2rgb) ->pack(-side => 'left', pady => 2, padx => 2); # Add a dialog widget my $dialog = $mw->Dialog; MainLoop; sub rgb2hex { my $red = $redscale->get(); my $green = $greenscale->get(); my $blue = $bluescale->get(); my $color = sprintf("#%02X%02X%02X", $red, $green, $blue); $hexValueEnt->delete(0, 'end'); $hexValueEnt->insert(0, $color); setcolor(); } # Converts the hex value to rgb sub hex2rgb { my $hex = $hexValueEnt->get(); if ($hex =~ m/^\#[0-9a-fA-F]+$/ and length($hex) == 7) { my @rgb = split(//, $hex); my $red = hex($rgb[1].$rgb[2]); $redscale->set($red); my $green = hex($rgb[3].$rgb[4]); $greenscale->set($green); my $blue = hex($rgb[5].$rgb[6]); $bluescale->set($blue); setcolor(); } else { $dialog->configure(-title => 'Invalid Entry', -text => 'Invalid hex code value.'); $dialog->Show; } } # Resets the background color of the bottom frame sub setcolor { $rightFrm->configure(-background => $hexValueEnt->get()); } __DATA__