diff options
author | Barry Warsaw <barry@python.org> | 1998-10-01 21:40:48 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 1998-10-01 21:40:48 (GMT) |
commit | 46670a2d4238700a7b7244a1bcd83422c6690c80 (patch) | |
tree | 79dca6296e579b18782d2b1ec2fef38c54fec038 | |
parent | 6e5b301b02b17e442810c07ab2e9ec89e940701f (diff) | |
download | cpython-46670a2d4238700a7b7244a1bcd83422c6690c80.zip cpython-46670a2d4238700a7b7244a1bcd83422c6690c80.tar.gz cpython-46670a2d4238700a7b7244a1bcd83422c6690c80.tar.bz2 |
*** empty log message ***
-rw-r--r-- | Tools/pynche/ListViewer.py | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/Tools/pynche/ListViewer.py b/Tools/pynche/ListViewer.py new file mode 100644 index 0000000..61b2f27 --- /dev/null +++ b/Tools/pynche/ListViewer.py @@ -0,0 +1,98 @@ +import sys +from Tkinter import * +from pynche import __version__ +import ColorDB + +class ListViewer: + def __init__(self, switchboard, parent=None): + self.__sb = switchboard + self.__lastbox = None + root = self.__root = Toplevel(parent, class_='Pynche') + root.protocol('WM_DELETE_WINDOW', self.__withdraw) + root.title('Pynche %s' % __version__) + root.iconname('Pynche Color List') + root.bind('<Alt-q>', self.__quit) + root.bind('<Alt-Q>', self.__quit) + # + # create the canvas which holds everything, and its scrollbar + # + canvas = self.__canvas = Canvas(root, width=160, height=300) + self.__scrollbar = Scrollbar(root) + self.__scrollbar.pack(fill=Y, side=RIGHT) + canvas.pack(fill=BOTH, expand=1) + canvas.configure(yscrollcommand=(self.__scrollbar, 'set')) + self.__scrollbar.configure(command=(canvas, 'yview')) + # + # create all the buttons + colordb = switchboard.colordb() + row = 0 + names = colordb.all_names() + names.sort() + widest = 0 + bboxes = self.__bboxes = [] + for name in names: + exactcolor = ColorDB.triplet_to_rrggbb(colordb.find_byname(name)) + canvas.create_rectangle(5, row*20 + 5, + 20, row*20 + 20, + fill=exactcolor) + textid = canvas.create_text(25, row*20 + 13, + text=name, + anchor=W) + x1, y1, textend, y2 = canvas.bbox(textid) + boxid = canvas.create_rectangle(3, row*20+3, + textend+3, row*20 + 23, + outline='', + tags=(exactcolor,)) + canvas.tag_bind(boxid, '<ButtonPress>', self.__onselection) + bboxes.append(boxid) + if textend+3 > widest: + widest = textend+3 + row = row + 1 + canvheight = (row-1)*20 + 25 + canvas.config(scrollregion=(0, 0, 150, canvheight)) + for box in bboxes: + x1, y1, x2, y2 = canvas.coords(box) + canvas.coords(box, x1, y1, widest, y2) + + def __onselection(self, event=None): + canvas = self.__canvas + # find the current box + x = canvas.canvasx(event.x) + y = canvas.canvasy(event.y) + ids = canvas.find_overlapping(x, y, x, y) + for boxid in ids: + if boxid in self.__bboxes: + break + else: + print 'No box found!' + return + tags = canvas.gettags(boxid) + for t in tags: + if t[0] == '#': + break + else: + print 'No color tag found!' + return + red, green, blue = ColorDB.rrggbb_to_triplet(t) + self.__sb.update_views(red, green, blue) + + def __selectbox(self, boxid): + canvas = self.__canvas + # turn off the last box + if self.__lastbox: + canvas.itemconfigure(self.__lastbox, outline='') + self.__lastbox = boxid + canvas.itemconfigure(boxid, outline='black') + + def __quit(self, event=None): + sys.exit(0) + + def __withdraw(self, event=None): + self.__root.withdraw() + + def deiconify(self, event=None): + self.__root.deiconify() + + def update_yourself(self, red, green, blue): + colorname = ColorDB.triplet_to_rrggbb((red, green, blue)) + self.__selectbox(colorname) |