mirror of
				https://github.com/python/cpython.git
				synced 2025-11-03 19:34:08 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			129 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			129 lines
		
	
	
	
		
			2.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
#! /usr/bin/env python
 | 
						||
 | 
						||
"""Pynche: The PYthon Natural Color and Hue Editor.
 | 
						||
 | 
						||
Pynche is based largely on a similar color editor I wrote years ago for the
 | 
						||
Sunview window system.  That editor was called ICE: the Interactive Color
 | 
						||
Editor.  I'd always wanted to port the editor to X but didn't feel like
 | 
						||
hacking X and C code to do it.  Fast forward many years, to where Python +
 | 
						||
Tkinter + Pmw provides such a nice programming environment, with enough
 | 
						||
power, that I finally buckled down and implemented it.  I changed the name
 | 
						||
because these days, too many other systems have the acronym `ICE'.
 | 
						||
 | 
						||
This program currently requires Python 1.5 with Tkinter.  It also requires at
 | 
						||
least Pmw 0.6.1.  It has only been tested on Solaris 2.6.  Feedback is greatly 
 | 
						||
appreciated.  Send email to bwarsaw@python.org
 | 
						||
 | 
						||
Usage: %(PROGRAM)s [-c color] [-h]
 | 
						||
 | 
						||
Where:
 | 
						||
    --color color
 | 
						||
    -c color
 | 
						||
        initial color, as an X color name or #RRGGBB format
 | 
						||
 | 
						||
    --help
 | 
						||
    -h
 | 
						||
        print this message
 | 
						||
 | 
						||
"""
 | 
						||
 | 
						||
__version__ = '1.0'
 | 
						||
 | 
						||
import sys
 | 
						||
import getopt
 | 
						||
import Pmw
 | 
						||
import ColorDB
 | 
						||
from Tkinter import *
 | 
						||
from PyncheWidget import PyncheWidget
 | 
						||
 | 
						||
 | 
						||
 | 
						||
PROGRAM = sys.argv[0]
 | 
						||
 | 
						||
# Milliseconds between interrupt checks
 | 
						||
KEEPALIVE_TIMER = 500
 | 
						||
 | 
						||
RGBCOLOR = 1
 | 
						||
HSICOLOR = 2
 | 
						||
NAMEDCOLOR = 3
 | 
						||
 | 
						||
# Default locations of rgb.txt or other textual color database
 | 
						||
RGB_TXT = [
 | 
						||
    # Solaris OpenWindows
 | 
						||
    '/usr/openwin/lib/rgb.txt',
 | 
						||
    # add more here
 | 
						||
    ]
 | 
						||
 | 
						||
 | 
						||
 | 
						||
def usage(status, msg=''):
 | 
						||
    if msg:
 | 
						||
	print msg
 | 
						||
    print __doc__ % globals()
 | 
						||
    sys.exit(status)
 | 
						||
 | 
						||
 | 
						||
 | 
						||
app = None
 | 
						||
 | 
						||
def keepalive():
 | 
						||
    # Exercise the Python interpreter regularly so keybard interrupts get
 | 
						||
    # through.
 | 
						||
    app.tk.createtimerhandler(KEEPALIVE_TIMER, keepalive)
 | 
						||
 | 
						||
 | 
						||
def main():
 | 
						||
    global app
 | 
						||
 | 
						||
    initialcolor = 'grey50'
 | 
						||
    try:
 | 
						||
	opts, args = getopt.getopt(sys.argv[1:],
 | 
						||
				   'hc:',
 | 
						||
				   ['color=', 'help'])
 | 
						||
    except getopt.error, msg:
 | 
						||
	usage(1, msg)
 | 
						||
 | 
						||
    if args:
 | 
						||
	usage(1)
 | 
						||
 | 
						||
    for opt, arg in opts:
 | 
						||
	if opt in ('-h', '--help'):
 | 
						||
	    usage(0)
 | 
						||
	elif opt in ('-c', '--color'):
 | 
						||
	    initialcolor = arg
 | 
						||
 | 
						||
    # create the windows and go
 | 
						||
    for f in RGB_TXT:
 | 
						||
	try:
 | 
						||
	    colordb = ColorDB.get_colordb(f)
 | 
						||
	    break
 | 
						||
	except IOError:
 | 
						||
	    pass
 | 
						||
    else:
 | 
						||
	raise IOError('No color database file found')
 | 
						||
 | 
						||
    app = Pmw.initialise(fontScheme='pmw1')
 | 
						||
    app.title('Pynche %s' % __version__)
 | 
						||
    app.tk.createtimerhandler(KEEPALIVE_TIMER, keepalive)
 | 
						||
 | 
						||
    # get triplet for initial color
 | 
						||
    try:
 | 
						||
	red, green, blue = colordb.find_byname(initialcolor)
 | 
						||
    except ColorDB.BadColor:
 | 
						||
	# must be a #rrggbb style color
 | 
						||
	try:
 | 
						||
	    red, green, blue = ColorDB.rrggbb_to_triplet(initialcolor)
 | 
						||
	except ColorDB.BadColor:
 | 
						||
	    usage(1, 'Bad initial color: %s' % initialcolor)
 | 
						||
 | 
						||
    p = PyncheWidget(colordb, app, color=(red, green, blue))
 | 
						||
    try:
 | 
						||
	keepalive()
 | 
						||
	app.mainloop()
 | 
						||
    except KeyboardInterrupt:
 | 
						||
	pass
 | 
						||
 | 
						||
 | 
						||
 | 
						||
if __name__ == '__main__':
 | 
						||
    main()
 |