1998-01-31 23:39:01 +00:00
|
|
|
|
"""Main Pynche (Pythonically Natural Color and Hue Editor) widget.
|
|
|
|
|
"""
|
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
import sys
|
1998-01-31 23:39:01 +00:00
|
|
|
|
from Tkinter import *
|
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
# Milliseconds between interrupt checks
|
|
|
|
|
KEEPALIVE_TIMER = 500
|
1998-02-17 22:25:23 +00:00
|
|
|
|
|
|
|
|
|
|
1998-02-12 19:52:31 +00:00
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
class PyncheWidget:
|
|
|
|
|
def __init__(self, version):
|
|
|
|
|
# create the first and top window
|
|
|
|
|
root = self.__root = Tk(className='Pynche')
|
|
|
|
|
root.protocol('WM_DELETE_WINDOW', self.__quit)
|
|
|
|
|
root.title('Pynche %s' % version)
|
|
|
|
|
root.iconname('Pynche')
|
|
|
|
|
root.tk.createtimerhandler(KEEPALIVE_TIMER, self.__keepalive)
|
|
|
|
|
#
|
|
|
|
|
# create the menubar
|
|
|
|
|
#
|
|
|
|
|
menubar = self.__menubar = Frame(root, relief=RAISED, borderwidth=2)
|
|
|
|
|
menubar.pack(fill=X)
|
|
|
|
|
#
|
|
|
|
|
# File menu
|
|
|
|
|
#
|
|
|
|
|
filebtn = Menubutton(menubar, text='File',
|
|
|
|
|
underline=0)
|
|
|
|
|
filebtn.pack(side=LEFT)
|
|
|
|
|
filemenu = Menu(filebtn, tearoff=0)
|
|
|
|
|
filebtn['menu'] = filemenu
|
|
|
|
|
filemenu.add_command(label='Quit',
|
|
|
|
|
command=self.__quit,
|
|
|
|
|
accelerator='Alt-Q',
|
|
|
|
|
underline=0)
|
|
|
|
|
root.bind('<Alt-q>', self.__quit)
|
|
|
|
|
root.bind('<Alt-Q>', self.__quit)
|
|
|
|
|
#
|
|
|
|
|
# Edit Menu
|
|
|
|
|
#
|
|
|
|
|
editbtn = Menubutton(menubar, text='Edit',
|
|
|
|
|
underline=0)
|
|
|
|
|
editbtn.pack(side=LEFT)
|
|
|
|
|
editmenu = Menu(editbtn, tearoff=0)
|
|
|
|
|
editbtn['menu'] = editmenu
|
|
|
|
|
editmenu.add_command(label='Options...',
|
|
|
|
|
command=self.__popup_options,
|
|
|
|
|
underline=0)
|
|
|
|
|
#
|
|
|
|
|
# Help menu
|
|
|
|
|
#
|
|
|
|
|
helpbtn = Menubutton(menubar, text='Help',
|
|
|
|
|
underline=0)
|
|
|
|
|
helpbtn.pack(side=RIGHT)
|
|
|
|
|
helpmenu = Menu(helpbtn, tearoff=0)
|
|
|
|
|
helpbtn['menu'] = helpmenu
|
|
|
|
|
helpmenu.add_command(label='About...',
|
|
|
|
|
command=self.__popup_about,
|
|
|
|
|
underline=0)
|
|
|
|
|
|
|
|
|
|
def __keepalive(self):
|
|
|
|
|
# Exercise the Python interpreter regularly so keyboard interrupts get
|
|
|
|
|
# through.
|
|
|
|
|
self.__root.tk.createtimerhandler(KEEPALIVE_TIMER, self.__keepalive)
|
1998-02-12 19:52:31 +00:00
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
def __quit(self, event=None):
|
|
|
|
|
sys.exit(0)
|
1998-02-12 19:52:31 +00:00
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
def start(self):
|
|
|
|
|
self.__keepalive()
|
|
|
|
|
self.__root.mainloop()
|
1998-02-17 22:25:23 +00:00
|
|
|
|
|
1998-09-28 23:38:44 +00:00
|
|
|
|
def parent(self):
|
|
|
|
|
return self.__root
|
|
|
|
|
|
|
|
|
|
def __popup_options(self, event=None):
|
|
|
|
|
print 'Options...'
|
1998-02-17 22:25:23 +00:00
|
|
|
|
|
|
|
|
|
def __popup_about(self, event=None):
|
1998-09-28 23:38:44 +00:00
|
|
|
|
print 'About...'
|
|
|
|
|
|
|
|
|
|
## # create chip window
|
|
|
|
|
## group = Pmw.Group(parent, tag_text='Current Color')
|
|
|
|
|
## interior = group.interior()
|
|
|
|
|
## group.pack(side=LEFT, expand=YES, fill=BOTH)
|
|
|
|
|
## self.__selected = ChipWidget(interior,
|
|
|
|
|
## label_text='Selected')
|
|
|
|
|
## self.__selected.grid()
|
|
|
|
|
## self.__nearest = ChipWidget(interior,
|
|
|
|
|
## label_text='Nearest')
|
|
|
|
|
## self.__nearest.grid(row=0, column=1)
|
|
|
|
|
|
|
|
|
|
## # TBD: this is somewhat bogus, as the code should be in a derived
|
|
|
|
|
## # class of ChipWidget.
|
|
|
|
|
## self.__chip = self.__nearest.component('chip')
|
|
|
|
|
## self.__chip.bind('<ButtonPress-1>', self.__buttonpress)
|
|
|
|
|
## self.__chip.bind('<ButtonRelease-1>', self.__buttonrelease)
|
|
|
|
|
|
|
|
|
|
## # create the type-in window
|
|
|
|
|
## self.__typein = TypeinWidget(interior)
|
|
|
|
|
## self.__typein.grid(row=0, column=2)
|
|
|
|
|
|
|
|
|
|
## # Check keywords and initialize options
|
|
|
|
|
## self.initialiseoptions(PyncheWidget)
|
|
|
|
|
|
|
|
|
|
## self.__typein.configure(delegate=self)
|
|
|
|
|
## self.__reds.configure(delegate=self)
|
|
|
|
|
## self.__greens.configure(delegate=self)
|
|
|
|
|
## self.__blues.configure(delegate=self)
|
|
|
|
|
|
|
|
|
|
## def __popup_about(self, event=None):
|
|
|
|
|
## if not self.__about_dialog:
|
|
|
|
|
## Pmw.aboutversion('1.0')
|
|
|
|
|
## Pmw.aboutcopyright('Copyright (C) 1998 Barry A. Warsaw\n'
|
|
|
|
|
## 'All rights reserved')
|
|
|
|
|
## Pmw.aboutcontact('For information about Pynche contact:\n'
|
|
|
|
|
## 'Barry A. Warsaw\n'
|
|
|
|
|
## 'email: bwarsaw@python.org')
|
|
|
|
|
## self.__about_dialog = Pmw.AboutDialog(
|
|
|
|
|
## applicationname='Pynche -- the PYthonically Natural\n'
|
|
|
|
|
## 'Color and Hue Editor')
|
|
|
|
|
## self.__about_dialog.show()
|
1998-03-10 00:17:01 +00:00
|
|
|
|
|