mirror of
				https://github.com/python/cpython.git
				synced 2025-11-02 22:51:25 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			1000 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1000 lines
		
	
	
	
		
			35 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 | 
						|
#
 | 
						|
# $Id$
 | 
						|
#
 | 
						|
# tixwidgets.py --
 | 
						|
#
 | 
						|
#	For Tix, see http://tix.sourceforge.net
 | 
						|
#
 | 
						|
# 	This is a demo program of all Tix widgets available from Python. If
 | 
						|
#	you have installed Python & Tix properly, you can execute this as
 | 
						|
#
 | 
						|
#		% python tixwidgets.py
 | 
						|
#
 | 
						|
 | 
						|
import os, os.path, sys, Tix
 | 
						|
from Tkconstants import *
 | 
						|
 | 
						|
TCL_DONT_WAIT		= 1<<1
 | 
						|
TCL_WINDOW_EVENTS	= 1<<2
 | 
						|
TCL_FILE_EVENTS		= 1<<3
 | 
						|
TCL_TIMER_EVENTS	= 1<<4
 | 
						|
TCL_IDLE_EVENTS		= 1<<5
 | 
						|
TCL_ALL_EVENTS		= 0
 | 
						|
 | 
						|
class Demo:
 | 
						|
    def __init__(self, top):
 | 
						|
        self.root = top
 | 
						|
        self.exit = -1
 | 
						|
 | 
						|
        self.dir = None				# script directory
 | 
						|
        self.balloon = None			# balloon widget
 | 
						|
        self.useBalloons = Tix.StringVar()
 | 
						|
        self.useBalloons.set('0')
 | 
						|
        self.statusbar = None			# status bar widget
 | 
						|
        self.welmsg = None			# Msg widget
 | 
						|
        self.welfont = ''			# font name
 | 
						|
        self.welsize = ''			# font size
 | 
						|
 | 
						|
        progname = sys.argv[0]
 | 
						|
        dirname = os.path.dirname(progname)
 | 
						|
        if dirname and dirname != os.curdir:
 | 
						|
            self.dir = dirname
 | 
						|
            index = -1
 | 
						|
            for i in range(len(sys.path)):
 | 
						|
                p = sys.path[i]
 | 
						|
                if p in ("", os.curdir):
 | 
						|
                    index = i
 | 
						|
            if index >= 0:
 | 
						|
                sys.path[index] = dirname
 | 
						|
            else:
 | 
						|
                sys.path.insert(0, dirname)
 | 
						|
        else:
 | 
						|
            self.dir = os.getcwd()
 | 
						|
        sys.path.insert(0, self.dir+'/samples')
 | 
						|
 | 
						|
    def MkMainMenu(self):
 | 
						|
        top = self.root
 | 
						|
        w = Tix.Frame(top, bd=2, relief=RAISED)
 | 
						|
        file = Tix.Menubutton(w, text='File', underline=0, takefocus=0)
 | 
						|
        help = Tix.Menubutton(w, text='Help', underline=0, takefocus=0)
 | 
						|
        file.pack(side=LEFT)
 | 
						|
        help.pack(side=RIGHT)
 | 
						|
        fm = Tix.Menu(file, tearoff=0)
 | 
						|
        file['menu'] = fm
 | 
						|
        hm = Tix.Menu(help, tearoff=0)
 | 
						|
        help['menu'] = hm
 | 
						|
 | 
						|
        if w.tk.eval ('info commands console') == "console":
 | 
						|
            fm.add_command(label='Console', underline=1,
 | 
						|
                           command=lambda w=w: w.tk.eval('console show'))
 | 
						|
 | 
						|
        fm.add_command(label='Exit', underline=1,
 | 
						|
                     command = lambda self=self: self.quitcmd () )
 | 
						|
        hm.add_checkbutton(label='BalloonHelp', underline=0, command=ToggleHelp,
 | 
						|
                           variable=self.useBalloons)
 | 
						|
        # The trace variable option doesn't seem to work, instead I use 'command'
 | 
						|
        #apply(w.tk.call, ('trace', 'variable', self.useBalloons, 'w',
 | 
						|
        #		      ToggleHelp))
 | 
						|
        return w
 | 
						|
 | 
						|
    def MkMainNotebook(self):
 | 
						|
        top = self.root
 | 
						|
        w = Tix.NoteBook(top, ipadx=5, ipady=5, options="""
 | 
						|
        *TixNoteBook*tagPadX 6
 | 
						|
        *TixNoteBook*tagPadY 4
 | 
						|
        *TixNoteBook*borderWidth 2
 | 
						|
        """)
 | 
						|
        # This may be required if there is no *Background option
 | 
						|
        top['bg'] = w['bg']
 | 
						|
 | 
						|
        w.add('wel', label='Welcome', underline=0,
 | 
						|
              createcmd=lambda w=w, name='wel': MkWelcome(w, name))
 | 
						|
        w.add('cho', label='Choosers', underline=0,
 | 
						|
              createcmd=lambda w=w, name='cho': MkChoosers(w, name))
 | 
						|
        w.add('scr', label='Scrolled Widgets', underline=0,
 | 
						|
              createcmd=lambda w=w, name='scr': MkScroll(w, name))
 | 
						|
        w.add('mgr', label='Manager Widgets', underline=0,
 | 
						|
              createcmd=lambda w=w, name='mgr': MkManager(w, name))
 | 
						|
        w.add('dir', label='Directory List', underline=0,
 | 
						|
              createcmd=lambda w=w, name='dir': MkDirList(w, name))
 | 
						|
        w.add('exp', label='Run Sample Programs', underline=0,
 | 
						|
              createcmd=lambda w=w, name='exp': MkSample(w, name))
 | 
						|
        return w
 | 
						|
 | 
						|
    def MkMainStatus(self):
 | 
						|
        global demo
 | 
						|
        top = self.root
 | 
						|
 | 
						|
        w = Tix.Frame(top, relief=Tix.RAISED, bd=1)
 | 
						|
        demo.statusbar = Tix.Label(w, relief=Tix.SUNKEN, bd=1)
 | 
						|
        demo.statusbar.form(padx=3, pady=3, left=0, right='%70')
 | 
						|
        return w
 | 
						|
 | 
						|
    def build(self):
 | 
						|
        root = self.root
 | 
						|
        z = root.winfo_toplevel()
 | 
						|
        z.wm_title('Tix Widget Demonstration')
 | 
						|
        z.geometry('790x590+10+10')
 | 
						|
 | 
						|
        demo.balloon = Tix.Balloon(root)
 | 
						|
        frame1 = self.MkMainMenu()
 | 
						|
        frame2 = self.MkMainNotebook()
 | 
						|
        frame3 = self.MkMainStatus()
 | 
						|
        frame1.pack(side=TOP, fill=X)
 | 
						|
        frame3.pack(side=BOTTOM, fill=X)
 | 
						|
        frame2.pack(side=TOP, expand=1, fill=BOTH, padx=4, pady=4)
 | 
						|
        demo.balloon['statusbar'] = demo.statusbar
 | 
						|
        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
 | 
						|
 | 
						|
    def quitcmd (self):
 | 
						|
        """Quit our mainloop. It is up to you to call root.destroy() after."""
 | 
						|
        self.exit = 0
 | 
						|
 | 
						|
    def loop(self):
 | 
						|
        import tkMessageBox, traceback
 | 
						|
        while self.exit < 0:
 | 
						|
            try:
 | 
						|
                self.root.tk.dooneevent(TCL_ALL_EVENTS)
 | 
						|
            except SystemExit:
 | 
						|
                #print 'Exit'
 | 
						|
                self.exit = 1
 | 
						|
                break
 | 
						|
            except KeyboardInterrupt:
 | 
						|
                if tkMessageBox.askquestion ('Interrupt', 'Really Quit?') == 'yes':
 | 
						|
                    # self.tk.eval('exit')
 | 
						|
                    return
 | 
						|
                else:
 | 
						|
                    pass
 | 
						|
                continue
 | 
						|
            except:
 | 
						|
                t, v, tb = sys.exc_info()
 | 
						|
                text = ""
 | 
						|
                for line in traceback.format_exception(t,v,tb):
 | 
						|
                    text += line + '\n'
 | 
						|
                try: tkMessageBox.showerror ('Error', text)
 | 
						|
                except: pass
 | 
						|
                self.exit = 1
 | 
						|
                raise SystemExit, 1
 | 
						|
 | 
						|
    def destroy (self):
 | 
						|
        self.root.destroy()
 | 
						|
    
 | 
						|
def RunMain(root):
 | 
						|
    global demo
 | 
						|
 | 
						|
    demo = Demo(root)
 | 
						|
 | 
						|
    demo.build()
 | 
						|
    demo.loop()
 | 
						|
    demo.destroy()
 | 
						|
 | 
						|
# Tabs
 | 
						|
def MkWelcome(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    bar = MkWelcomeBar(w)
 | 
						|
    text = MkWelcomeText(w)
 | 
						|
    bar.pack(side=TOP, fill=X, padx=2, pady=2)
 | 
						|
    text.pack(side=TOP, fill=BOTH, expand=1)
 | 
						|
 | 
						|
def MkWelcomeBar(top):
 | 
						|
    global demo
 | 
						|
 | 
						|
    w = Tix.Frame(top, bd=2, relief=Tix.GROOVE)
 | 
						|
    b1 = Tix.ComboBox(w, command=lambda w=top: MainTextFont(w))
 | 
						|
    b2 = Tix.ComboBox(w, command=lambda w=top: MainTextFont(w))
 | 
						|
    b1.entry['width'] = 15
 | 
						|
    b1.slistbox.listbox['height'] = 3
 | 
						|
    b2.entry['width'] = 4
 | 
						|
    b2.slistbox.listbox['height'] = 3
 | 
						|
 | 
						|
    demo.welfont = b1
 | 
						|
    demo.welsize = b2
 | 
						|
 | 
						|
    b1.insert(Tix.END, 'Courier')
 | 
						|
    b1.insert(Tix.END, 'Helvetica')
 | 
						|
    b1.insert(Tix.END, 'Lucida')
 | 
						|
    b1.insert(Tix.END, 'Times Roman')
 | 
						|
 | 
						|
    b2.insert(Tix.END, '8')
 | 
						|
    b2.insert(Tix.END, '10')
 | 
						|
    b2.insert(Tix.END, '12')
 | 
						|
    b2.insert(Tix.END, '14')
 | 
						|
    b2.insert(Tix.END, '18')
 | 
						|
 | 
						|
    b1.pick(1)
 | 
						|
    b2.pick(3)
 | 
						|
 | 
						|
    b1.pack(side=Tix.LEFT, padx=4, pady=4)
 | 
						|
    b2.pack(side=Tix.LEFT, padx=4, pady=4)
 | 
						|
 | 
						|
    demo.balloon.bind_widget(b1, msg='Choose\na font',
 | 
						|
			     statusmsg='Choose a font for this page')
 | 
						|
    demo.balloon.bind_widget(b2, msg='Point size',
 | 
						|
			     statusmsg='Choose the font size for this page')
 | 
						|
    return w
 | 
						|
 | 
						|
def MkWelcomeText(top):
 | 
						|
    global demo
 | 
						|
 | 
						|
    w = Tix.ScrolledWindow(top, scrollbar='auto')
 | 
						|
    win = w.window
 | 
						|
    text = 'Welcome to TIX in Python'
 | 
						|
    title = Tix.Label(win,
 | 
						|
		      bd=0, width=30, anchor=Tix.N, text=text)
 | 
						|
    msg = Tix.Message(win,
 | 
						|
		      bd=0, width=400, anchor=Tix.N,
 | 
						|
		      text='Tix is a set of mega-widgets based on TK. This program \
 | 
						|
demonstrates the widgets in the Tix widget set. You can choose the pages \
 | 
						|
in this window to look at the corresponding widgets. \n\n\
 | 
						|
To quit this program, choose the "File | Exit" command.\n\n\
 | 
						|
For more information, see http://tix.sourceforge.net.')
 | 
						|
    title.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10)
 | 
						|
    msg.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10)
 | 
						|
    demo.welmsg = msg
 | 
						|
    return w
 | 
						|
 | 
						|
def MainTextFont(w):
 | 
						|
    global demo
 | 
						|
 | 
						|
    if not demo.welmsg:
 | 
						|
	return
 | 
						|
    font = demo.welfont['value']
 | 
						|
    point = demo.welsize['value']
 | 
						|
    if font == 'Times Roman':
 | 
						|
	font = 'times'
 | 
						|
    fontstr = '%s %s' % (font, point)
 | 
						|
    demo.welmsg['font'] = fontstr
 | 
						|
 | 
						|
def ToggleHelp():
 | 
						|
    if demo.useBalloons.get() == '1':
 | 
						|
	demo.balloon['state'] = 'both'
 | 
						|
    else:
 | 
						|
	demo.balloon['state'] = 'none'
 | 
						|
 | 
						|
def MkChoosers(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
 | 
						|
 | 
						|
    til = Tix.LabelFrame(w, label='Chooser Widgets')
 | 
						|
    cbx = Tix.LabelFrame(w, label='tixComboBox')
 | 
						|
    ctl = Tix.LabelFrame(w, label='tixControl')
 | 
						|
    sel = Tix.LabelFrame(w, label='tixSelect')
 | 
						|
    opt = Tix.LabelFrame(w, label='tixOptionMenu')
 | 
						|
    fil = Tix.LabelFrame(w, label='tixFileEntry')
 | 
						|
    fbx = Tix.LabelFrame(w, label='tixFileSelectBox')
 | 
						|
    tbr = Tix.LabelFrame(w, label='Tool Bar')
 | 
						|
 | 
						|
    MkTitle(til.frame)
 | 
						|
    MkCombo(cbx.frame)
 | 
						|
    MkControl(ctl.frame)
 | 
						|
    MkSelect(sel.frame)
 | 
						|
    MkOptMenu(opt.frame)
 | 
						|
    MkFileEnt(fil.frame)
 | 
						|
    MkFileBox(fbx.frame)
 | 
						|
    MkToolBar(tbr.frame)
 | 
						|
 | 
						|
    # First column: comBox and selector
 | 
						|
    cbx.form(top=0, left=0, right='%33')
 | 
						|
    sel.form(left=0, right='&'+str(cbx), top=cbx)
 | 
						|
    opt.form(left=0, right='&'+str(cbx), top=sel, bottom=-1)
 | 
						|
 | 
						|
    # Second column: title .. etc
 | 
						|
    til.form(left=cbx, top=0,right='%66')
 | 
						|
    ctl.form(left=cbx, right='&'+str(til), top=til)
 | 
						|
    fil.form(left=cbx, right='&'+str(til), top=ctl)
 | 
						|
    tbr.form(left=cbx, right='&'+str(til), top=fil, bottom=-1)
 | 
						|
 | 
						|
    #
 | 
						|
    # Third column: file selection
 | 
						|
    fbx.form(right=-1, top=0, left='%66')
 | 
						|
 | 
						|
def MkCombo(w):
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixComboBox*label.width', 10)
 | 
						|
    w.option_add('*' + prefix + '*TixComboBox*label.anchor', Tix.E)
 | 
						|
    w.option_add('*' + prefix + '*TixComboBox*entry.width', 14)
 | 
						|
 | 
						|
    static = Tix.ComboBox(w, label='Static', editable=0)
 | 
						|
    editable = Tix.ComboBox(w, label='Editable', editable=1)
 | 
						|
    history = Tix.ComboBox(w, label='History', editable=1, history=1,
 | 
						|
			   anchor=Tix.E)
 | 
						|
    static.insert(Tix.END, 'January')
 | 
						|
    static.insert(Tix.END, 'February')
 | 
						|
    static.insert(Tix.END, 'March')
 | 
						|
    static.insert(Tix.END, 'April')
 | 
						|
    static.insert(Tix.END, 'May')
 | 
						|
    static.insert(Tix.END, 'June')
 | 
						|
    static.insert(Tix.END, 'July')
 | 
						|
    static.insert(Tix.END, 'August')
 | 
						|
    static.insert(Tix.END, 'September')
 | 
						|
    static.insert(Tix.END, 'October')
 | 
						|
    static.insert(Tix.END, 'November')
 | 
						|
    static.insert(Tix.END, 'December')
 | 
						|
 | 
						|
    editable.insert(Tix.END, 'Angola')
 | 
						|
    editable.insert(Tix.END, 'Bangladesh')
 | 
						|
    editable.insert(Tix.END, 'China')
 | 
						|
    editable.insert(Tix.END, 'Denmark')
 | 
						|
    editable.insert(Tix.END, 'Ecuador')
 | 
						|
 | 
						|
    history.insert(Tix.END, '/usr/bin/ksh')
 | 
						|
    history.insert(Tix.END, '/usr/local/lib/python')
 | 
						|
    history.insert(Tix.END, '/var/adm')
 | 
						|
 | 
						|
    static.pack(side=Tix.TOP, padx=5, pady=3)
 | 
						|
    editable.pack(side=Tix.TOP, padx=5, pady=3)
 | 
						|
    history.pack(side=Tix.TOP, padx=5, pady=3)
 | 
						|
 | 
						|
states = ['Bengal', 'Delhi', 'Karnataka', 'Tamil Nadu']
 | 
						|
 | 
						|
def spin_cmd(w, inc):
 | 
						|
    idx = states.index(demo_spintxt.get()) + inc
 | 
						|
    if idx < 0:
 | 
						|
	idx = len(states) - 1
 | 
						|
    elif idx >= len(states):
 | 
						|
	idx = 0
 | 
						|
# following doesn't work.
 | 
						|
#    return states[idx]
 | 
						|
    demo_spintxt.set(states[idx])	# this works
 | 
						|
 | 
						|
def spin_validate(w):
 | 
						|
    global states, demo_spintxt
 | 
						|
 | 
						|
    try:
 | 
						|
	i = states.index(demo_spintxt.get())
 | 
						|
    except ValueError:
 | 
						|
	return states[0]
 | 
						|
    return states[i]
 | 
						|
    # why this procedure works as opposed to the previous one beats me.
 | 
						|
 | 
						|
def MkControl(w):
 | 
						|
    global demo_spintxt
 | 
						|
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixControl*label.width', 10)
 | 
						|
    w.option_add('*' + prefix + '*TixControl*label.anchor', Tix.E)
 | 
						|
    w.option_add('*' + prefix + '*TixControl*entry.width', 13)
 | 
						|
 | 
						|
    demo_spintxt = Tix.StringVar()
 | 
						|
    demo_spintxt.set(states[0])
 | 
						|
    simple = Tix.Control(w, label='Numbers')
 | 
						|
    spintxt = Tix.Control(w, label='States', variable=demo_spintxt)
 | 
						|
    spintxt['incrcmd'] = lambda w=spintxt: spin_cmd(w, 1)
 | 
						|
    spintxt['decrcmd'] = lambda w=spintxt: spin_cmd(w, -1)
 | 
						|
    spintxt['validatecmd'] = lambda w=spintxt: spin_validate(w)
 | 
						|
 | 
						|
    simple.pack(side=Tix.TOP, padx=5, pady=3)
 | 
						|
    spintxt.pack(side=Tix.TOP, padx=5, pady=3)
 | 
						|
    
 | 
						|
def MkSelect(w):
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixSelect*label.anchor', Tix.CENTER)
 | 
						|
    w.option_add('*' + prefix + '*TixSelect*orientation', Tix.VERTICAL)
 | 
						|
    w.option_add('*' + prefix + '*TixSelect*labelSide', Tix.TOP)
 | 
						|
 | 
						|
    sel1 = Tix.Select(w, label='Mere Mortals', allowzero=1, radio=1)
 | 
						|
    sel2 = Tix.Select(w, label='Geeks', allowzero=1, radio=0)
 | 
						|
 | 
						|
    sel1.add('eat', text='Eat')
 | 
						|
    sel1.add('work', text='Work')
 | 
						|
    sel1.add('play', text='Play')
 | 
						|
    sel1.add('party', text='Party')
 | 
						|
    sel1.add('sleep', text='Sleep')
 | 
						|
 | 
						|
    sel2.add('eat', text='Eat')
 | 
						|
    sel2.add('prog1', text='Program')
 | 
						|
    sel2.add('prog2', text='Program')
 | 
						|
    sel2.add('prog3', text='Program')
 | 
						|
    sel2.add('sleep', text='Sleep')
 | 
						|
 | 
						|
    sel1.pack(side=Tix.LEFT, padx=5, pady=3, fill=Tix.X)
 | 
						|
    sel2.pack(side=Tix.LEFT, padx=5, pady=3, fill=Tix.X)
 | 
						|
 | 
						|
def MkOptMenu(w):
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixOptionMenu*label.anchor', Tix.E)
 | 
						|
    m = Tix.OptionMenu(w, label='File Format : ', options='menubutton.width 15')
 | 
						|
    m.add_command('text', label='Plain Text')
 | 
						|
    m.add_command('post', label='PostScript')
 | 
						|
    m.add_command('format', label='Formatted Text')
 | 
						|
    m.add_command('html', label='HTML')
 | 
						|
    m.add_command('sep')
 | 
						|
    m.add_command('tex', label='LaTeX')
 | 
						|
    m.add_command('rtf', label='Rich Text Format')
 | 
						|
 | 
						|
    m.pack(fill=Tix.X, padx=5, pady=3)
 | 
						|
 | 
						|
def MkFileEnt(w):
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='Press the "open file" icon button and a TixFileSelectDialog will popup.')
 | 
						|
    ent = Tix.FileEntry(w, label='Select a file : ')
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
    ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 | 
						|
 | 
						|
def MkFileBox(w):
 | 
						|
    """The FileSelectBox is a Motif-style box with various enhancements.
 | 
						|
    For example, you can adjust the size of the two listboxes
 | 
						|
    and your past selections are recorded.
 | 
						|
    """
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
 | 
						|
    box = Tix.FileSelectBox(w)
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
    box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 | 
						|
 | 
						|
def MkToolBar(w):
 | 
						|
    global demo
 | 
						|
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixSelect*frame.borderWidth', 1)
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The Select widget is also good for arranging buttons in a tool bar.')
 | 
						|
    bar = Tix.Frame(w, bd=2, relief=Tix.RAISED)
 | 
						|
    font = Tix.Select(w, allowzero=1, radio=0, label='')
 | 
						|
    para = Tix.Select(w, allowzero=0, radio=1, label='')
 | 
						|
 | 
						|
    font.add('bold', bitmap='@' + demo.dir + '/bitmaps/bold.xbm')
 | 
						|
    font.add('italic', bitmap='@' + demo.dir + '/bitmaps/italic.xbm')
 | 
						|
    font.add('underline', bitmap='@' + demo.dir + '/bitmaps/underline.xbm')
 | 
						|
    font.add('capital', bitmap='@' + demo.dir + '/bitmaps/capital.xbm')
 | 
						|
 | 
						|
    para.add('left', bitmap='@' + demo.dir + '/bitmaps/leftj.xbm')
 | 
						|
    para.add('right', bitmap='@' + demo.dir + '/bitmaps/rightj.xbm')
 | 
						|
    para.add('center', bitmap='@' + demo.dir + '/bitmaps/centerj.xbm')
 | 
						|
    para.add('justify', bitmap='@' + demo.dir + '/bitmaps/justify.xbm')
 | 
						|
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
    bar.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 | 
						|
    font.pack({'in':bar}, side=Tix.LEFT, padx=3, pady=3)
 | 
						|
    para.pack({'in':bar}, side=Tix.LEFT, padx=3, pady=3)
 | 
						|
 | 
						|
def MkTitle(w):
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix: prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixSelect*frame.borderWidth', 1)
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='There are many types of "chooser" widgets that allow the user to input different types of information')
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
 | 
						|
def MkScroll(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
 | 
						|
 | 
						|
    sls = Tix.LabelFrame(w, label='tixScrolledListBox')
 | 
						|
    swn = Tix.LabelFrame(w, label='tixScrolledWindow')
 | 
						|
    stx = Tix.LabelFrame(w, label='tixScrolledText')
 | 
						|
 | 
						|
    MkSList(sls.frame)
 | 
						|
    MkSWindow(swn.frame)
 | 
						|
    MkSText(stx.frame)
 | 
						|
 | 
						|
    sls.form(top=0, left=0, right='%33', bottom=-1)
 | 
						|
    swn.form(top=0, left=sls, right='%66', bottom=-1)
 | 
						|
    stx.form(top=0, left=swn, right=-1, bottom=-1)
 | 
						|
 | 
						|
def MkSList(w):
 | 
						|
    top = Tix.Frame(w, width=300, height=330)
 | 
						|
    bot = Tix.Frame(w)
 | 
						|
    msg = Tix.Message(top, 
 | 
						|
		      relief=Tix.FLAT, width=200, anchor=Tix.N,
 | 
						|
		      text='This TixScrolledListBox is configured so that it uses scrollbars only when it is necessary. Use the handles to resize the listbox and watch the scrollbars automatically appear and disappear.')
 | 
						|
 | 
						|
    list = Tix.ScrolledListBox(top, scrollbar='auto')
 | 
						|
    list.place(x=50, y=150, width=120, height=80)
 | 
						|
    list.listbox.insert(Tix.END, 'Alabama')
 | 
						|
    list.listbox.insert(Tix.END, 'California')
 | 
						|
    list.listbox.insert(Tix.END, 'Montana')
 | 
						|
    list.listbox.insert(Tix.END, 'New Jersey')
 | 
						|
    list.listbox.insert(Tix.END, 'New York')
 | 
						|
    list.listbox.insert(Tix.END, 'Pennsylvania')
 | 
						|
    list.listbox.insert(Tix.END, 'Washington')
 | 
						|
 | 
						|
    rh = Tix.ResizeHandle(top, bg='black',
 | 
						|
			  relief=Tix.RAISED,
 | 
						|
			  handlesize=8, gridded=1, minwidth=50, minheight=30)
 | 
						|
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=list: SList_reset(w,x))
 | 
						|
    top.propagate(0)
 | 
						|
    msg.pack(fill=Tix.X)
 | 
						|
    btn.pack(anchor=Tix.CENTER)
 | 
						|
    top.pack(expand=1, fill=Tix.BOTH)
 | 
						|
    bot.pack(fill=Tix.BOTH)
 | 
						|
    list.bind('<Map>', func=lambda arg=0, rh=rh, list=list:
 | 
						|
	      list.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(list)))
 | 
						|
 | 
						|
def SList_reset(rh, list):
 | 
						|
    list.place(x=50, y=150, width=120, height=80)
 | 
						|
    list.update()
 | 
						|
    rh.attach_widget(list)
 | 
						|
 | 
						|
# See below why this is necessary.
 | 
						|
global image1
 | 
						|
image1 = None
 | 
						|
def MkSWindow(w):
 | 
						|
    global demo, image1
 | 
						|
 | 
						|
    text = 'The TixScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.'
 | 
						|
    
 | 
						|
    file = os.path.join(demo.dir, 'bitmaps', 'tix.gif')
 | 
						|
    if not os.path.isfile(file):
 | 
						|
        text += ' (Image missing)'
 | 
						|
 | 
						|
    top = Tix.Frame(w, width=330, height=330)
 | 
						|
    bot = Tix.Frame(w)
 | 
						|
    msg = Tix.Message(top, 
 | 
						|
		      relief=Tix.FLAT, width=200, anchor=Tix.N,
 | 
						|
		      text=text)
 | 
						|
 | 
						|
    win = Tix.ScrolledWindow(top, scrollbar='auto')
 | 
						|
 | 
						|
    # This image is not showing up under Python unless it is set to a
 | 
						|
    # global variable - no problem under Tcl. I assume it is being garbage
 | 
						|
    # collected some how, even though the tcl command 'image names' shows
 | 
						|
    # that as far as Tcl is concerned, the image exists and is called pyimage1.
 | 
						|
    image1 = Tix.Image('photo', file=file)
 | 
						|
    lbl = Tix.Label(win.window, image=image1)
 | 
						|
    lbl.pack(expand=1, fill=Tix.BOTH)
 | 
						|
 | 
						|
    win.place(x=30, y=150, width=190, height=120)
 | 
						|
 | 
						|
    rh = Tix.ResizeHandle(top, bg='black',
 | 
						|
			  relief=Tix.RAISED,
 | 
						|
			  handlesize=8, gridded=1, minwidth=50, minheight=30)
 | 
						|
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=win: SWindow_reset(w,x))
 | 
						|
    top.propagate(0)
 | 
						|
    msg.pack(fill=Tix.X)
 | 
						|
    btn.pack(anchor=Tix.CENTER)
 | 
						|
    top.pack(expand=1, fill=Tix.BOTH)
 | 
						|
    bot.pack(fill=Tix.BOTH)
 | 
						|
    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
 | 
						|
	     win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))
 | 
						|
 | 
						|
def SWindow_reset(rh, win):
 | 
						|
    win.place(x=30, y=150, width=190, height=120)
 | 
						|
    win.update()
 | 
						|
    rh.attach_widget(win)
 | 
						|
 | 
						|
def MkSText(w):
 | 
						|
    top = Tix.Frame(w, width=330, height=330)
 | 
						|
    bot = Tix.Frame(w)
 | 
						|
    msg = Tix.Message(top, 
 | 
						|
		      relief=Tix.FLAT, width=200, anchor=Tix.N,
 | 
						|
		      text='The TixScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget.')
 | 
						|
 | 
						|
    win = Tix.ScrolledText(top, scrollbar='auto')
 | 
						|
#    win.text['wrap'] = 'none'
 | 
						|
    win.text.insert(Tix.END, 'This is a text widget embedded in a scrolled window. Although the original Tix demo does not have any text here, I decided to put in some so that you can see the effect of scrollbars etc.')
 | 
						|
    win.place(x=30, y=150, width=190, height=100)
 | 
						|
 | 
						|
    rh = Tix.ResizeHandle(top, bg='black',
 | 
						|
			  relief=Tix.RAISED,
 | 
						|
			  handlesize=8, gridded=1, minwidth=50, minheight=30)
 | 
						|
    btn = Tix.Button(bot, text='Reset', command=lambda w=rh, x=win: SText_reset(w,x))
 | 
						|
    top.propagate(0)
 | 
						|
    msg.pack(fill=Tix.X)
 | 
						|
    btn.pack(anchor=Tix.CENTER)
 | 
						|
    top.pack(expand=1, fill=Tix.BOTH)
 | 
						|
    bot.pack(fill=Tix.BOTH)
 | 
						|
    win.bind('<Map>', func=lambda arg=0, rh=rh, win=win:
 | 
						|
	     win.tk.call('tixDoWhenIdle', str(rh), 'attachwidget', str(win)))
 | 
						|
 | 
						|
def SText_reset(rh, win):
 | 
						|
    win.place(x=30, y=150, width=190, height=120)
 | 
						|
    win.update()
 | 
						|
    rh.attach_widget(win)
 | 
						|
 | 
						|
def MkManager(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
 | 
						|
 | 
						|
    pane = Tix.LabelFrame(w, label='tixPanedWindow')
 | 
						|
    note = Tix.LabelFrame(w, label='tixNoteBook')
 | 
						|
 | 
						|
    MkPanedWindow(pane.frame)
 | 
						|
    MkNoteBook(note.frame)
 | 
						|
 | 
						|
    pane.form(top=0, left=0, right=note, bottom=-1)
 | 
						|
    note.form(top=0, right=-1, bottom=-1)
 | 
						|
 | 
						|
def MkPanedWindow(w):
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The PanedWindow widget allows the user to interactively manipulate the sizes of several panes. The panes can be arranged either vertically or horizontally.')
 | 
						|
    group = Tix.LabelEntry(w, label='Newsgroup:', options='entry.width 25')
 | 
						|
    group.entry.insert(0,'comp.lang.python')
 | 
						|
    pane = Tix.PanedWindow(w, orientation='vertical')
 | 
						|
 | 
						|
    p1 = pane.add('list', min=70, size=100)
 | 
						|
    p2 = pane.add('text', min=70)
 | 
						|
    list = Tix.ScrolledListBox(p1)
 | 
						|
    text = Tix.ScrolledText(p2)
 | 
						|
 | 
						|
    list.listbox.insert(Tix.END, "  12324 Re: Tkinter is good for your health")
 | 
						|
    list.listbox.insert(Tix.END, "+ 12325 Re: Tkinter is good for your health")
 | 
						|
    list.listbox.insert(Tix.END, "+ 12326 Re: Tix is even better for your health (Was: Tkinter is good...)")
 | 
						|
    list.listbox.insert(Tix.END, "  12327 Re: Tix is even better for your health (Was: Tkinter is good...)")
 | 
						|
    list.listbox.insert(Tix.END, "+ 12328 Re: Tix is even better for your health (Was: Tkinter is good...)")
 | 
						|
    list.listbox.insert(Tix.END, "  12329 Re: Tix is even better for your health (Was: Tkinter is good...)")
 | 
						|
    list.listbox.insert(Tix.END, "+ 12330 Re: Tix is even better for your health (Was: Tkinter is good...)")
 | 
						|
 | 
						|
    text.text['bg'] = list.listbox['bg']
 | 
						|
    text.text['wrap'] = 'none'
 | 
						|
    text.text.insert(Tix.END, """
 | 
						|
Mon, 19 Jun 1995 11:39:52        comp.lang.python              Thread   34 of  220
 | 
						|
Lines 353       A new way to put text and bitmaps together iNo responses
 | 
						|
ioi@blue.seas.upenn.edu                Ioi K. Lam at University of Pennsylvania
 | 
						|
 | 
						|
Hi,
 | 
						|
 | 
						|
I have implemented a new image type called "compound". It allows you
 | 
						|
to glue together a bunch of bitmaps, images and text strings together
 | 
						|
to form a bigger image. Then you can use this image with widgets that
 | 
						|
support the -image option. For example, you can display a text string string
 | 
						|
together with a bitmap, at the same time, inside a TK button widget.
 | 
						|
""")
 | 
						|
    list.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
 | 
						|
    text.pack(expand=1, fill=Tix.BOTH, padx=4, pady=6)
 | 
						|
 | 
						|
    msg.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
 | 
						|
    group.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
 | 
						|
    pane.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH, expand=1)
 | 
						|
 | 
						|
def MkNoteBook(w):
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The NoteBook widget allows you to layout a complex interface into individual pages.')
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixControl*entry.width', 10)
 | 
						|
    w.option_add('*' + prefix + '*TixControl*label.width', 18)
 | 
						|
    w.option_add('*' + prefix + '*TixControl*label.anchor', Tix.E)
 | 
						|
    w.option_add('*' + prefix + '*TixNoteBook*tagPadX', 8)
 | 
						|
 | 
						|
    nb = Tix.NoteBook(w, ipadx=6, ipady=6)
 | 
						|
    nb.add('hard_disk', label="Hard Disk", underline=0)
 | 
						|
    nb.add('network', label="Network", underline=0)
 | 
						|
 | 
						|
    # Frame for the buttons that are present on all pages
 | 
						|
    common = Tix.Frame(nb.hard_disk)
 | 
						|
    common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)
 | 
						|
    CreateCommonButtons(common)
 | 
						|
 | 
						|
    # Widgets belonging only to this page
 | 
						|
    a = Tix.Control(nb.hard_disk, value=12, label='Access Time: ')
 | 
						|
    w = Tix.Control(nb.hard_disk, value=400, label='Write Throughput: ')
 | 
						|
    r = Tix.Control(nb.hard_disk, value=400, label='Read Throughput: ')
 | 
						|
    c = Tix.Control(nb.hard_disk, value=1021, label='Capacity: ')
 | 
						|
    a.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    w.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    r.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    c.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
 | 
						|
    common = Tix.Frame(nb.network)
 | 
						|
    common.pack(side=Tix.RIGHT, padx=2, pady=2, fill=Tix.Y)
 | 
						|
    CreateCommonButtons(common)
 | 
						|
 | 
						|
    a = Tix.Control(nb.network, value=12, label='Access Time: ')
 | 
						|
    w = Tix.Control(nb.network, value=400, label='Write Throughput: ')
 | 
						|
    r = Tix.Control(nb.network, value=400, label='Read Throughput: ')
 | 
						|
    c = Tix.Control(nb.network, value=1021, label='Capacity: ')
 | 
						|
    u = Tix.Control(nb.network, value=10, label='Users: ')
 | 
						|
    a.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    w.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    r.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    c.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
    u.pack(side=Tix.TOP, padx=20, pady=2)
 | 
						|
 | 
						|
    msg.pack(side=Tix.TOP, padx=3, pady=3, fill=Tix.BOTH)
 | 
						|
    nb.pack(side=Tix.TOP, padx=5, pady=5, fill=Tix.BOTH, expand=1)
 | 
						|
 | 
						|
def CreateCommonButtons(f):
 | 
						|
    ok = Tix.Button(f, text='OK', width = 6)
 | 
						|
    cancel = Tix.Button(f, text='Cancel', width = 6)
 | 
						|
    ok.pack(side=Tix.TOP, padx=2, pady=2)
 | 
						|
    cancel.pack(side=Tix.TOP, padx=2, pady=2)
 | 
						|
 | 
						|
def MkDirList(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    w.option_add('*' + prefix + '*TixLabelFrame*label.padX', 4)
 | 
						|
 | 
						|
    dir = Tix.LabelFrame(w, label='tixDirList')
 | 
						|
    fsbox = Tix.LabelFrame(w, label='tixExFileSelectBox')
 | 
						|
    MkDirListWidget(dir.frame)
 | 
						|
    MkExFileWidget(fsbox.frame)
 | 
						|
    dir.form(top=0, left=0, right='%40', bottom=-1)
 | 
						|
    fsbox.form(top=0, left='%40', right=-1, bottom=-1)
 | 
						|
 | 
						|
def MkDirListWidget(w):
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The TixDirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories.')
 | 
						|
    dirlist = Tix.DirList(w, options='hlist.padY 1 hlist.width 25 hlist.height 16')
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
    dirlist.pack(side=Tix.TOP, padx=3, pady=3)
 | 
						|
 | 
						|
def MkExFileWidget(w):
 | 
						|
    msg = Tix.Message(w, 
 | 
						|
		      relief=Tix.FLAT, width=240, anchor=Tix.N,
 | 
						|
		      text='The TixExFileSelectBox widget is more user friendly than the Motif style FileSelectBox.')
 | 
						|
    # There's a bug in the ComboBoxes - the scrolledlistbox is destroyed
 | 
						|
    box = Tix.ExFileSelectBox(w, bd=2, relief=Tix.RAISED)
 | 
						|
    msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
 | 
						|
    box.pack(side=Tix.TOP, padx=3, pady=3)
 | 
						|
 | 
						|
###
 | 
						|
### List of all the demos we want to show off
 | 
						|
comments = {'widget' : 'Widget Demos', 'image' : 'Image Demos'}
 | 
						|
samples = {'Balloon'		: 'Balloon',
 | 
						|
	   'Button Box'		: 'BtnBox',
 | 
						|
	   'Combo Box'		: 'ComboBox',
 | 
						|
	   'Compound Image'	: 'CmpImg',
 | 
						|
	   'Directory List'	: 'DirList',
 | 
						|
	   'Directory Tree'	: 'DirTree',
 | 
						|
	   'Control'		: 'Control',
 | 
						|
	   'Notebook'		: 'NoteBook',
 | 
						|
	   'Option Menu'	: 'OptMenu',
 | 
						|
	   'Paned Window'	: 'PanedWin',
 | 
						|
	   'Popup Menu'		: 'PopMenu',
 | 
						|
	   'ScrolledHList (1)'	: 'SHList1',
 | 
						|
	   'ScrolledHList (2)'	: 'SHList2',
 | 
						|
	   'Tree (dynamic)'	: 'Tree'
 | 
						|
}
 | 
						|
 | 
						|
# There are still a lot of demos to be translated:
 | 
						|
##	set root {
 | 
						|
##	    {d "File Selectors"		file	}
 | 
						|
##	    {d "Hierachical ListBox"	hlist	}
 | 
						|
##	    {d "Tabular ListBox"	tlist	{c tixTList}}
 | 
						|
##	    {d "Grid Widget"		grid	{c tixGrid}}
 | 
						|
##	    {d "Manager Widgets"	manager	}
 | 
						|
##	    {d "Scrolled Widgets"	scroll	}
 | 
						|
##	    {d "Miscellaneous Widgets"	misc	}
 | 
						|
##	    {d "Image Types"		image	}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set image {
 | 
						|
##	    {d "Compound Image"		cmpimg	}
 | 
						|
##	    {d "XPM Image"		xpm	{i pixmap}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set cmpimg {
 | 
						|
##	    {f "In Buttons"		CmpImg.tcl	}
 | 
						|
##	    {f "In NoteBook"		CmpImg2.tcl	}
 | 
						|
##	    {f "Notebook Color Tabs"	CmpImg4.tcl	}
 | 
						|
##	    {f "Icons"			CmpImg3.tcl	}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set xpm {
 | 
						|
##	    {f "In Button"		Xpm.tcl		{i pixmap}}
 | 
						|
##	    {f "In Menu"		Xpm1.tcl	{i pixmap}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set file {
 | 
						|
##added	    {f DirList				DirList.tcl	}
 | 
						|
##added	    {f DirTree				DirTree.tcl	}
 | 
						|
##	    {f DirSelectDialog			DirDlg.tcl	}
 | 
						|
##	    {f ExFileSelectDialog		EFileDlg.tcl	}
 | 
						|
##	    {f FileSelectDialog			FileDlg.tcl	}
 | 
						|
##	    {f FileEntry			FileEnt.tcl	}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set hlist {
 | 
						|
##	    {f HList			HList1.tcl	}
 | 
						|
##	    {f CheckList		ChkList.tcl	{c tixCheckList}}
 | 
						|
##done	    {f "ScrolledHList (1)"	SHList.tcl	}
 | 
						|
##done	    {f "ScrolledHList (2)"	SHList2.tcl	}
 | 
						|
##done	    {f Tree			Tree.tcl	}
 | 
						|
##done	    {f "Tree (Dynamic)"		DynTree.tcl	{v win}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set tlist {
 | 
						|
##	    {f "ScrolledTList (1)"	STList1.tcl	{c tixTList}}
 | 
						|
##	    {f "ScrolledTList (2)"	STList2.tcl	{c tixTList}}
 | 
						|
##	}
 | 
						|
##	global tcl_platform
 | 
						|
##	#  This demo hangs windows
 | 
						|
##	if {$tcl_platform(platform) != "windows"} {
 | 
						|
##na	lappend tlist     {f "TList File Viewer"	STList3.tcl	{c tixTList}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set grid {
 | 
						|
##na	    {f "Simple Grid"		SGrid0.tcl	{c tixGrid}}
 | 
						|
##na	    {f "ScrolledGrid"		SGrid1.tcl	{c tixGrid}}
 | 
						|
##na	    {f "Editable Grid"		EditGrid.tcl	{c tixGrid}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set scroll {
 | 
						|
##	    {f ScrolledListBox		SListBox.tcl	}
 | 
						|
##	    {f ScrolledText		SText.tcl	}
 | 
						|
##	    {f ScrolledWindow		SWindow.tcl	}
 | 
						|
##na	    {f "Canvas Object View"	CObjView.tcl	{c tixCObjView}}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set manager {
 | 
						|
##na	    {f ListNoteBook		ListNBK.tcl	}
 | 
						|
##done	    {f NoteBook			NoteBook.tcl	}
 | 
						|
##done	    {f PanedWindow		PanedWin.tcl	}
 | 
						|
##	}
 | 
						|
##	
 | 
						|
##	set misc {
 | 
						|
##done	    {f Balloon			Balloon.tcl	}
 | 
						|
##done	    {f ButtonBox		BtnBox.tcl	}
 | 
						|
##done	    {f ComboBox			ComboBox.tcl	}
 | 
						|
##done	    {f Control			Control.tcl	}
 | 
						|
##	    {f LabelEntry		LabEntry.tcl	}
 | 
						|
##	    {f LabelFrame		LabFrame.tcl	}
 | 
						|
##na	    {f Meter			Meter.tcl	{c tixMeter}}
 | 
						|
##done	    {f OptionMenu		OptMenu.tcl	}
 | 
						|
##done	    {f PopupMenu		PopMenu.tcl	}
 | 
						|
##	    {f Select			Select.tcl	}
 | 
						|
##	    {f StdButtonBox		StdBBox.tcl	}
 | 
						|
##	}
 | 
						|
##
 | 
						|
 | 
						|
stypes = {}
 | 
						|
stypes['widget'] = ['Balloon', 'Button Box', 'Combo Box', 'Control',
 | 
						|
                    'Directory List', 'Directory Tree',
 | 
						|
		    'Notebook', 'Option Menu', 'Popup Menu', 'Paned Window',
 | 
						|
		    'ScrolledHList (1)', 'ScrolledHList (2)', 'Tree (dynamic)']
 | 
						|
stypes['image'] = ['Compound Image']
 | 
						|
 | 
						|
def MkSample(nb, name):
 | 
						|
    w = nb.page(name)
 | 
						|
    prefix = Tix.OptionName(w)
 | 
						|
    if not prefix:
 | 
						|
	prefix = ''
 | 
						|
    else:
 | 
						|
	prefix = '*' + prefix
 | 
						|
    w.option_add(prefix + '*TixLabelFrame*label.padX', 4)
 | 
						|
 | 
						|
    pane = Tix.PanedWindow(w, orientation='horizontal')
 | 
						|
    pane.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH)
 | 
						|
    f1 = pane.add('list', expand='1')
 | 
						|
    f2 = pane.add('text', expand='5')
 | 
						|
    f1['relief'] = 'flat'
 | 
						|
    f2['relief'] = 'flat'
 | 
						|
 | 
						|
    lab = Tix.Label(f1, text='Select a sample program:', anchor=Tix.W)
 | 
						|
    lab.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=5, pady=5)
 | 
						|
    lab1 = Tix.Label(f2, text='Source:', anchor=Tix.W)
 | 
						|
    lab1.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=5, pady=5)
 | 
						|
 | 
						|
    slb = Tix.Tree(f1, options='hlist.width 25')
 | 
						|
    slb.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=5)
 | 
						|
 | 
						|
    stext = Tix.ScrolledText(f2, name='stext')
 | 
						|
    font = root.tk.eval('tix option get fixed_font')
 | 
						|
    stext.text.config(font=font)
 | 
						|
    stext.text.bind('<Up>', lambda w=stext.text: w.yview(scroll='-1 unit'))
 | 
						|
    stext.text.bind('<Down>', lambda w=stext.text: w.yview(scroll='1 unit'))
 | 
						|
    stext.text.bind('<Left>', lambda w=stext.text: w.xview(scroll='-1 unit'))
 | 
						|
    stext.text.bind('<Right>', lambda w=stext.text: w.xview(scroll='1 unit'))
 | 
						|
    stext.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=7)
 | 
						|
 | 
						|
    frame = Tix.Frame(f2, name='frame')
 | 
						|
    frame.pack(side=Tix.TOP, expand=0, fill=Tix.X, padx=7)
 | 
						|
 | 
						|
    run = Tix.Button(frame, text='Run ...', name='run')
 | 
						|
    view = Tix.Button(frame, text='View Source ...', name='view')
 | 
						|
    run.pack(side=Tix.LEFT, expand=0, fill=Tix.NONE)
 | 
						|
    view.pack(side=Tix.LEFT, expand=0, fill=Tix.NONE)
 | 
						|
 | 
						|
    stext.text['bg'] = slb.hlist['bg']
 | 
						|
    stext.text['state'] = 'disabled'
 | 
						|
    stext.text['wrap'] = 'none'
 | 
						|
    stext.text['width'] = 80
 | 
						|
 | 
						|
    slb.hlist['separator'] = '.'
 | 
						|
    slb.hlist['width'] = 25
 | 
						|
    slb.hlist['drawbranch'] = 0
 | 
						|
    slb.hlist['indent'] = 10
 | 
						|
    slb.hlist['wideselect'] = 1
 | 
						|
    slb.hlist['command'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'run')
 | 
						|
    slb.hlist['browsecmd'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'browse')
 | 
						|
 | 
						|
    run['command']      = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'run')
 | 
						|
    view['command'] = lambda args=0, w=w,slb=slb,stext=stext,run=run,view=view: Sample_Action(w, slb, stext, run, view, 'view')
 | 
						|
 | 
						|
    for type in ['widget', 'image']:
 | 
						|
	if type != 'widget':
 | 
						|
	    x = Tix.Frame(slb.hlist, bd=2, height=2, width=150,
 | 
						|
			  relief=Tix.SUNKEN, bg=slb.hlist['bg'])
 | 
						|
	    slb.hlist.add_child(itemtype=Tix.WINDOW, window=x, state='disabled')
 | 
						|
	x = slb.hlist.add_child(itemtype=Tix.TEXT, state='disabled',
 | 
						|
				text=comments[type])
 | 
						|
	for key in stypes[type]:
 | 
						|
	    slb.hlist.add_child(x, itemtype=Tix.TEXT, data=key,
 | 
						|
				text=key)
 | 
						|
    slb.hlist.selection_clear()
 | 
						|
 | 
						|
    run['state'] = 'disabled'
 | 
						|
    view['state'] = 'disabled'
 | 
						|
 | 
						|
def Sample_Action(w, slb, stext, run, view, action):
 | 
						|
    global demo
 | 
						|
 | 
						|
    hlist = slb.hlist
 | 
						|
    anchor = hlist.info_anchor()
 | 
						|
    if not anchor:
 | 
						|
	run['state'] = 'disabled'
 | 
						|
	view['state'] = 'disabled'
 | 
						|
    elif not hlist.info_parent(anchor):
 | 
						|
	# a comment
 | 
						|
	return
 | 
						|
 | 
						|
    run['state'] = 'normal'
 | 
						|
    view['state'] = 'normal'
 | 
						|
    key = hlist.info_data(anchor)
 | 
						|
    title = key
 | 
						|
    prog = samples[key]
 | 
						|
 | 
						|
    if action == 'run':
 | 
						|
	exec('import ' + prog)
 | 
						|
	w = Tix.Toplevel()
 | 
						|
	w.title(title)
 | 
						|
	rtn = eval(prog + '.RunSample')
 | 
						|
	rtn(w)
 | 
						|
    elif action == 'view':
 | 
						|
	w = Tix.Toplevel()
 | 
						|
	w.title('Source view: ' + title)
 | 
						|
	LoadFile(w, demo.dir + '/samples/' + prog + '.py')
 | 
						|
    elif action == 'browse':
 | 
						|
	ReadFile(stext.text, demo.dir + '/samples/' + prog + '.py')
 | 
						|
 | 
						|
def LoadFile(w, fname):
 | 
						|
    global root
 | 
						|
    b = Tix.Button(w, text='Close', command=w.destroy)
 | 
						|
    t = Tix.ScrolledText(w)
 | 
						|
    #    b.form(left=0, bottom=0, padx=4, pady=4)
 | 
						|
    #    t.form(left=0, bottom=b, right='-0', top=0)
 | 
						|
    t.pack()
 | 
						|
    b.pack()
 | 
						|
 | 
						|
    font = root.tk.eval('tix option get fixed_font')
 | 
						|
    t.text.config(font=font)
 | 
						|
    t.text['bd'] = 2
 | 
						|
    t.text['wrap'] = 'none'
 | 
						|
 | 
						|
    ReadFile(t.text, fname)
 | 
						|
 | 
						|
def ReadFile(w, fname):
 | 
						|
    old_state = w['state']
 | 
						|
    w['state'] = 'normal'
 | 
						|
    w.delete('0.0', Tix.END)
 | 
						|
 | 
						|
    try:
 | 
						|
	f = open(fname)
 | 
						|
	lines = f.readlines()
 | 
						|
	for s in lines:
 | 
						|
	    w.insert(Tix.END, s)
 | 
						|
	f.close()
 | 
						|
    finally:
 | 
						|
#	w.see('1.0')
 | 
						|
	w['state'] = old_state
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    root = Tix.Tk()
 | 
						|
    RunMain(root)
 | 
						|
 |