• Re: Colour display with sliders

    From snosniv@21:1/5 to snosniv on Mon Mar 13 04:13:49 2023
    On Monday, 13 March 2023 at 10:27:54 UTC, snosniv wrote:
    I have this simple working program to show what colours can be achieved by mixing the RGB parts, but is there a better way to call the proc from the command, rather than having globals in the proc?

    ##--------------------------------------------------------------------------------
    ## A simple program to explore what colours are possible by mixing the RGB parts
    ##--------------------------------------------------------------------------------

    scale .sc1 -from 0 -to 255 -length 255 -variable rrr \
    -orient vertical -label "Red slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    scale .sc2 -from 0 -to 255 -length 255 -variable ggg \
    -orient vertical -label "Green slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    scale .sc3 -from 0 -to 255 -length 255 -variable bbb \
    -orient vertical -label "Blue slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    # Initialise the colours to mid-range
    set rrr 127
    set ggg 127
    set bbb 127

    set red1 [expr ($rrr * 256 * 256)]
    set grn1 [expr ($ggg * 256)]
    set blu1 [expr ($bbb)]
    set all1 [expr ($rrr * 256 * 256) + ($ggg * 256) + ($bbb)]

    # Decimal to hex using format
    set red2 [format "#%06x" $red1]
    set grn2 [format "#%06x" $grn1]
    set blu2 [format "#%06x" $blu1]
    set all2 [format "#%06x" $all1]

    label .lb1 -text "" -font {Arial 12 bold} -bg $red2
    label .lb2 -text "" -font {Arial 12 bold} -bg $grn2
    label .lb3 -text "" -font {Arial 12 bold} -bg $blu2
    label .lb4 -text "" -font {Arial 12 bold} -bg $all2

    grid .sc1 -row 0 -column 0
    grid .sc2 -row 0 -column 1
    grid .sc3 -row 0 -column 2
    grid .lb1 -row 1 -column 0 -sticky ew
    grid .lb2 -row 1 -column 1 -sticky ew
    grid .lb3 -row 1 -column 2 -sticky ew
    grid .lb4 -row 2 -column 0 -columnspan 3 -sticky ew

    ##------------------------------------------------------------------------------
    proc colourchange {newcol} {

    global rrr ggg bbb

    set red1 [expr ($rrr * 256 * 256)]
    set grn1 [expr ($ggg * 256)]
    set blu1 [expr ($bbb)]
    set all1 [expr ($rrr * 256 * 256) + ($ggg * 256) + ($bbb)]

    # Decimal to hex using format
    set red2 [format "#%06x" $red1]
    set grn2 [format "#%06x" $grn1]
    set blu2 [format "#%06x" $blu1]
    set all2 [format "#%06x" $all1]

    .lb1 configure -bg $red2
    .lb2 configure -bg $grn2
    .lb3 configure -bg $blu2
    .lb4 configure -bg $all2
    } ##------------------------------------------------------------------------------


    TIA, KevP.

    To add to the above, is it possible to make the slider numbers appear in Hex?
    I can't see a way to do that?

    Kev P.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From snosniv@21:1/5 to All on Mon Mar 13 03:27:51 2023
    I have this simple working program to show what colours can be achieved by mixing the RGB parts, but is there a better way to call the proc from the command, rather than having globals in the proc?

    ##--------------------------------------------------------------------------------
    ## A simple program to explore what colours are possible by mixing the RGB parts
    ##--------------------------------------------------------------------------------

    scale .sc1 -from 0 -to 255 -length 255 -variable rrr \
    -orient vertical -label "Red slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    scale .sc2 -from 0 -to 255 -length 255 -variable ggg \
    -orient vertical -label "Green slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    scale .sc3 -from 0 -to 255 -length 255 -variable bbb \
    -orient vertical -label "Blue slider" \
    -tickinterval 16 -showvalue true \
    -command colourchange

    # Initialise the colours to mid-range
    set rrr 127
    set ggg 127
    set bbb 127

    set red1 [expr ($rrr * 256 * 256)]
    set grn1 [expr ($ggg * 256)]
    set blu1 [expr ($bbb)]
    set all1 [expr ($rrr * 256 * 256) + ($ggg * 256) + ($bbb)]

    # Decimal to hex using format
    set red2 [format "#%06x" $red1]
    set grn2 [format "#%06x" $grn1]
    set blu2 [format "#%06x" $blu1]
    set all2 [format "#%06x" $all1]

    label .lb1 -text "" -font {Arial 12 bold} -bg $red2
    label .lb2 -text "" -font {Arial 12 bold} -bg $grn2
    label .lb3 -text "" -font {Arial 12 bold} -bg $blu2
    label .lb4 -text "" -font {Arial 12 bold} -bg $all2

    grid .sc1 -row 0 -column 0
    grid .sc2 -row 0 -column 1
    grid .sc3 -row 0 -column 2
    grid .lb1 -row 1 -column 0 -sticky ew
    grid .lb2 -row 1 -column 1 -sticky ew
    grid .lb3 -row 1 -column 2 -sticky ew
    grid .lb4 -row 2 -column 0 -columnspan 3 -sticky ew

    ##------------------------------------------------------------------------------
    proc colourchange {newcol} {

    global rrr ggg bbb

    set red1 [expr ($rrr * 256 * 256)]
    set grn1 [expr ($ggg * 256)]
    set blu1 [expr ($bbb)]
    set all1 [expr ($rrr * 256 * 256) + ($ggg * 256) + ($bbb)]

    # Decimal to hex using format
    set red2 [format "#%06x" $red1]
    set grn2 [format "#%06x" $grn1]
    set blu2 [format "#%06x" $blu1]
    set all2 [format "#%06x" $all1]

    .lb1 configure -bg $red2
    .lb2 configure -bg $grn2
    .lb3 configure -bg $blu2
    .lb4 configure -bg $all2
    } ##------------------------------------------------------------------------------


    TIA, KevP.

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)
  • From dave bruchie@21:1/5 to All on Mon Mar 13 07:24:03 2023
    Consider using
    set rrr [.sc1 get]
    in the colourchange procedure instead of
    global rrr
    to read the red value (similarly for ggg bbb).
    If this is done, there is no need for the scale -variable option.

    Take a look at tk_chooseColor too

    Dave B

    --- SoupGate-Win32 v1.05
    * Origin: fsxNet Usenet Gateway (21:1/5)