2001-11-11 10:07:37 -04:00
# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
2001-03-21 03:42:07 -04:00
#
# $Id$
#
# tixwidgets.py --
2001-11-11 10:07:37 -04:00
#
# For Tix, see http://tix.sourceforge.net
#
2002-11-13 22:44:08 -04:00
# This is a demo program of some of the Tix widgets available in Python.
# If you have installed Python & Tix properly, you can execute this as
2001-03-21 03:42:07 -04:00
#
2001-11-25 10:50:56 -04:00
# % python tixwidgets.py
2001-03-21 03:42:07 -04:00
#
2001-11-25 10:50:56 -04:00
import os , os . path , sys , Tix
2001-11-11 10:07:37 -04:00
from Tkconstants import *
2002-11-13 22:44:08 -04:00
import traceback , tkMessageBox
2001-03-21 03:42:07 -04:00
2001-11-11 10:07:37 -04:00
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
2001-03-21 03:42:07 -04:00
2001-11-11 10:07:37 -04:00
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 )
2001-11-25 10:50:56 -04:00
fm = Tix . Menu ( file , tearoff = 0 )
2001-11-11 10:07:37 -04:00
file [ ' menu ' ] = fm
2001-11-25 10:50:56 -04:00
hm = Tix . Menu ( help , tearoff = 0 )
2001-11-11 10:07:37 -04:00
help [ ' menu ' ] = hm
2001-11-25 10:50:56 -04:00
fm . add_command ( label = ' Exit ' , underline = 1 ,
2001-11-11 10:07:37 -04:00
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))
2002-11-13 22:44:08 -04:00
2001-11-11 10:07:37 -04:00
return w
def MkMainNotebook ( self ) :
top = self . root
w = Tix . NoteBook ( top , ipadx = 5 , ipady = 5 , options = """
2002-11-13 22:44:08 -04:00
tagPadX 6
tagPadY 4
borderWidth 2
2001-11-11 10:07:37 -04:00
""" )
# 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 ' )
2002-11-13 22:44:08 -04:00
if z . winfo_screenwidth ( ) < = 800 :
z . geometry ( ' 790x590+10+10 ' )
else :
z . geometry ( ' 890x640+10+10 ' )
2001-11-11 10:07:37 -04:00
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 ( ) )
2002-11-13 22:44:08 -04:00
# To show Tcl errors - uncomment this to see the listbox bug.
# Tkinter defines a Tcl tkerror procedure that in effect
# silences all background Tcl error reporting.
# root.tk.eval('if {[info commands tkerror] != ""} {rename tkerror pytkerror}')
2001-11-11 10:07:37 -04:00
def quitcmd ( self ) :
2001-11-25 10:50:56 -04:00
""" Quit our mainloop. It is up to you to call root.destroy() after. """
2001-11-11 10:07:37 -04:00
self . exit = 0
def loop ( self ) :
2002-11-13 22:44:08 -04:00
""" This is an explict replacement for _tkinter mainloop()
It lets you catch keyboard interrupts easier , and avoids
the 20 msec . dead sleep ( ) which burns a constant CPU . """
2001-11-25 10:50:56 -04:00
while self . exit < 0 :
2002-11-13 22:44:08 -04:00
# There are 2 whiles here. The outer one lets you continue
# after a ^C interrupt.
2001-11-25 10:50:56 -04:00
try :
2002-11-13 22:44:08 -04:00
# This is the replacement for _tkinter mainloop()
# It blocks waiting for the next Tcl event using select.
while self . exit < 0 :
self . root . tk . dooneevent ( TCL_ALL_EVENTS )
2001-11-25 10:50:56 -04:00
except SystemExit :
2002-11-13 22:44:08 -04:00
# Tkinter uses SystemExit to exit
2001-11-25 10:50:56 -04:00
#print 'Exit'
self . exit = 1
2002-11-13 22:44:08 -04:00
return
2001-11-25 10:50:56 -04:00
except KeyboardInterrupt :
if tkMessageBox . askquestion ( ' Interrupt ' , ' Really Quit? ' ) == ' yes ' :
# self.tk.eval('exit')
2002-11-13 22:44:08 -04:00
self . exit = 1
2001-11-25 10:50:56 -04:00
return
continue
except :
2002-11-13 22:44:08 -04:00
# Otherwise it's some other error - be nice and say why
2001-11-25 10:50:56 -04:00
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
2002-03-17 14:19:13 -04:00
self . exit = 1
raise SystemExit , 1
2001-11-11 10:07:37 -04:00
def destroy ( self ) :
self . root . destroy ( )
2002-11-13 22:44:08 -04:00
2001-11-25 10:50:56 -04:00
def RunMain ( root ) :
global demo
2001-03-21 03:42:07 -04:00
2001-11-25 10:50:56 -04:00
demo = Demo ( root )
2001-03-21 03:42:07 -04:00
2001-11-11 10:07:37 -04:00
demo . build ( )
demo . loop ( )
demo . destroy ( )
2001-03-21 03:42:07 -04:00
2001-11-11 10:07:37 -04:00
# Tabs
2001-03-21 03:42:07 -04:00
def MkWelcome ( nb , name ) :
w = nb . page ( name )
bar = MkWelcomeBar ( w )
text = MkWelcomeText ( w )
2001-11-11 10:07:37 -04:00
bar . pack ( side = TOP , fill = X , padx = 2 , pady = 2 )
text . pack ( side = TOP , fill = BOTH , expand = 1 )
2001-03-21 03:42:07 -04:00
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 \n a 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 '
2001-11-11 10:07:37 -04:00
title = Tix . Label ( win ,
2001-03-21 03:42:07 -04:00
bd = 0 , width = 30 , anchor = Tix . N , text = text )
2001-11-11 10:07:37 -04:00
msg = Tix . Message ( win ,
2001-03-21 03:42:07 -04:00
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 '
2001-11-11 10:07:37 -04:00
fontstr = ' %s %s ' % ( font , point )
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
options = " label.padX 4 "
til = Tix . LabelFrame ( w , label = ' Chooser Widgets ' , options = options )
cbx = Tix . LabelFrame ( w , label = ' tixComboBox ' , options = options )
ctl = Tix . LabelFrame ( w , label = ' tixControl ' , options = options )
sel = Tix . LabelFrame ( w , label = ' tixSelect ' , options = options )
opt = Tix . LabelFrame ( w , label = ' tixOptionMenu ' , options = options )
fil = Tix . LabelFrame ( w , label = ' tixFileEntry ' , options = options )
fbx = Tix . LabelFrame ( w , label = ' tixFileSelectBox ' , options = options )
tbr = Tix . LabelFrame ( w , label = ' Tool Bar ' , options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
options = " label.width %d label.anchor %s entry.width %d " % ( 10 , Tix . E , 14 )
static = Tix . ComboBox ( w , label = ' Static ' , editable = 0 , options = options )
editable = Tix . ComboBox ( w , label = ' Editable ' , editable = 1 , options = options )
2001-03-21 03:42:07 -04:00
history = Tix . ComboBox ( w , label = ' History ' , editable = 1 , history = 1 ,
2002-11-13 22:44:08 -04:00
anchor = Tix . E , options = options )
2001-03-21 03:42:07 -04:00
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 ( ) )
2001-05-11 16:44:55 -03:00
except ValueError :
2001-03-21 03:42:07 -04:00
return states [ 0 ]
return states [ i ]
# why this procedure works as opposed to the previous one beats me.
def MkControl ( w ) :
global demo_spintxt
2002-11-13 22:44:08 -04:00
options = " label.width %d label.anchor %s entry.width %d " % ( 10 , Tix . E , 13 )
2001-03-21 03:42:07 -04:00
demo_spintxt = Tix . StringVar ( )
demo_spintxt . set ( states [ 0 ] )
2002-11-13 22:44:08 -04:00
simple = Tix . Control ( w , label = ' Numbers ' , options = options )
spintxt = Tix . Control ( w , label = ' States ' , variable = demo_spintxt ,
options = options )
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
2001-03-21 03:42:07 -04:00
def MkSelect ( w ) :
2002-11-13 22:44:08 -04:00
options = " label.anchor %s " % Tix . CENTER
2001-03-21 03:42:07 -04:00
2002-11-13 22:44:08 -04:00
sel1 = Tix . Select ( w , label = ' Mere Mortals ' , allowzero = 1 , radio = 1 ,
orientation = Tix . VERTICAL ,
labelside = Tix . TOP ,
options = options )
sel2 = Tix . Select ( w , label = ' Geeks ' , allowzero = 1 , radio = 0 ,
orientation = Tix . VERTICAL ,
labelside = Tix . TOP ,
options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
options = ' menubutton.width 15 label.anchor %s ' % Tix . E
m = Tix . OptionMenu ( w , label = ' File Format : ' , options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
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 ) :
2002-03-17 14:19:13 -04:00
""" 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 .
"""
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 240 , anchor = Tix . N ,
2002-03-17 14:19:13 -04:00
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. ' )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
""" The Select widget is also good for arranging buttons in a tool bar.
"""
2001-03-21 03:42:07 -04:00
global demo
2002-11-13 22:44:08 -04:00
options = ' frame.borderWidth 1 '
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
font = Tix . Select ( w , allowzero = 1 , radio = 0 , label = ' ' , options = options )
para = Tix . Select ( w , allowzero = 0 , radio = 1 , label = ' ' , options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
options = ' label.padX 4 '
2001-03-21 03:42:07 -04:00
2002-12-06 06:33:45 -04:00
sls = Tix . LabelFrame ( w , label = ' Tix.ScrolledListBox ' , options = options )
swn = Tix . LabelFrame ( w , label = ' Tix.ScrolledWindow ' , options = options )
stx = Tix . LabelFrame ( w , label = ' Tix.ScrolledText ' , options = options )
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
2001-03-21 03:42:07 -04:00
def MkSList ( w ) :
2002-11-13 22:44:08 -04:00
""" 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 . """
2001-03-21 03:42:07 -04:00
top = Tix . Frame ( w , width = 300 , height = 330 )
bot = Tix . Frame ( w )
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( top ,
2001-03-21 03:42:07 -04:00
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 )
def MkSWindow ( w ) :
2002-11-13 22:44:08 -04:00
""" The ScrolledWindow widget allows you to scroll any kind of Tk
widget . It is more versatile than a scrolled canvas widget .
"""
global demo
text = ' The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget. '
2001-11-25 10:50:56 -04:00
file = os . path . join ( demo . dir , ' bitmaps ' , ' tix.gif ' )
if not os . path . isfile ( file ) :
text + = ' (Image missing) '
2001-03-21 03:42:07 -04:00
top = Tix . Frame ( w , width = 330 , height = 330 )
bot = Tix . Frame ( w )
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( top ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 200 , anchor = Tix . N ,
2001-11-25 10:50:56 -04:00
text = text )
2001-03-21 03:42:07 -04:00
win = Tix . ScrolledWindow ( top , scrollbar = ' auto ' )
2001-11-25 10:50:56 -04:00
2002-12-09 22:18:49 -04:00
image1 = win . window . image_create ( ' photo ' , file = file )
2001-11-25 10:50:56 -04:00
lbl = Tix . Label ( win . window , image = image1 )
2001-03-21 03:42:07 -04:00
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 )
2002-12-30 19:52:01 -04:00
win . bind ( ' <Map> ' , func = lambda arg = 0 , rh = rh , win = win :
win . tk . call ( ' tixDoWhenIdle ' , str ( rh ) , ' attachwidget ' , str ( win ) ) )
2001-03-21 03:42:07 -04:00
def SWindow_reset ( rh , win ) :
win . place ( x = 30 , y = 150 , width = 190 , height = 120 )
win . update ( )
rh . attach_widget ( win )
def MkSText ( w ) :
2002-11-13 22:44:08 -04:00
""" The TixScrolledWindow widget allows you to scroll any kind of Tk
widget . It is more versatile than a scrolled canvas widget . """
2001-03-21 03:42:07 -04:00
top = Tix . Frame ( w , width = 330 , height = 330 )
bot = Tix . Frame ( w )
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( top ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 200 , anchor = Tix . N ,
2002-11-13 22:44:08 -04:00
text = ' The Tix ScrolledWindow widget allows you to scroll any kind of Tk widget. It is more versatile than a scrolled canvas widget. ' )
2001-03-21 03:42:07 -04:00
win = Tix . ScrolledText ( top , scrollbar = ' auto ' )
2002-12-30 19:52:01 -04:00
win . text [ ' wrap ' ] = ' none '
win . text . insert ( Tix . END , ''' When -scrollbar is set to " auto " , the
scrollbars are shown only when needed .
Additional modifiers can be used to force a
scrollbar to be shown or hidden . For example ,
" auto -y " means the horizontal scrollbar
should be shown when needed but the vertical
scrollbar should always be hidden ;
" auto +x " means the vertical scrollbar
should be shown when needed but the horizontal
scrollbar should always be shown , and so on . '''
)
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
options = ' label.padX 4 '
2001-03-21 03:42:07 -04:00
2002-12-06 06:33:45 -04:00
pane = Tix . LabelFrame ( w , label = ' Tix.PanedWindow ' , options = options )
note = Tix . LabelFrame ( w , label = ' Tix.NoteBook ' , options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
""" The PanedWindow widget allows the user to interactively manipulate
the sizes of several panes . The panes can be arranged either vertically
or horizontally .
"""
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
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. ' )
2001-11-25 10:50:56 -04:00
group = Tix . LabelEntry ( w , label = ' Newsgroup: ' , options = ' entry.width 25 ' )
group . entry . insert ( 0 , ' comp.lang.python ' )
2001-03-21 03:42:07 -04:00
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 )
2001-11-25 10:50:56 -04:00
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...) " )
2001-03-21 03:42:07 -04:00
text . text [ ' bg ' ] = list . listbox [ ' bg ' ]
text . text [ ' wrap ' ] = ' none '
text . text . insert ( Tix . END , """
2001-11-25 10:50:56 -04:00
Mon , 19 Jun 1995 11 : 39 : 52 comp . lang . python Thread 34 of 220
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 240 , anchor = Tix . N ,
text = ' The NoteBook widget allows you to layout a complex interface into individual pages. ' )
2002-11-13 22:44:08 -04:00
# prefix = Tix.OptionName(w)
# if not prefix: prefix = ''
# w.option_add('*' + prefix + '*TixNoteBook*tagPadX', 8)
options = " entry.width %d label.width %d label.anchor %s " % ( 10 , 18 , Tix . E )
nb = Tix . NoteBook ( w , ipadx = 6 , ipady = 6 , options = options )
2001-03-21 03:42:07 -04:00
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 )
2002-11-13 22:44:08 -04:00
options = " label.padX 4 "
2001-03-21 03:42:07 -04:00
2002-12-06 06:33:45 -04:00
dir = Tix . LabelFrame ( w , label = ' Tix.DirList ' , options = options )
fsbox = Tix . LabelFrame ( w , label = ' Tix.ExFileSelectBox ' , options = options )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
""" The TixDirList widget gives a graphical representation of the file
system directory and makes it easy for the user to choose and access
directories .
"""
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 240 , anchor = Tix . N ,
2002-11-13 22:44:08 -04:00
text = ' The Tix DirList widget gives a graphical representation of the file system directory and makes it easy for the user to choose and access directories. ' )
2001-03-21 03:42:07 -04:00
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 ) :
2002-11-13 22:44:08 -04:00
""" The TixExFileSelectBox widget is more user friendly than the Motif
style FileSelectBox . """
msg = Tix . Message ( w ,
2001-03-21 03:42:07 -04:00
relief = Tix . FLAT , width = 240 , anchor = Tix . N ,
2002-11-13 22:44:08 -04:00
text = ' The Tix ExFileSelectBox widget is more user friendly than the Motif style FileSelectBox. ' )
2001-03-21 03:42:07 -04:00
# 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 ' ,
2001-11-11 10:07:37 -04:00
' Directory List ' : ' DirList ' ,
' Directory Tree ' : ' DirTree ' ,
2001-03-21 03:42:07 -04:00
' Control ' : ' Control ' ,
' Notebook ' : ' NoteBook ' ,
' Option Menu ' : ' OptMenu ' ,
2001-11-25 10:50:56 -04:00
' Paned Window ' : ' PanedWin ' ,
2001-03-21 03:42:07 -04:00
' Popup Menu ' : ' PopMenu ' ,
' ScrolledHList (1) ' : ' SHList1 ' ,
' ScrolledHList (2) ' : ' SHList2 ' ,
' Tree (dynamic) ' : ' Tree '
}
2001-11-11 10:07:37 -04:00
# 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 }
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## set image {
## {d "Compound Image" cmpimg }
## {d "XPM Image" xpm {i pixmap}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## set cmpimg {
2002-11-13 22:44:08 -04:00
##done {f "In Buttons" CmpImg.tcl }
2001-11-11 10:07:37 -04:00
## {f "In NoteBook" CmpImg2.tcl }
## {f "Notebook Color Tabs" CmpImg4.tcl }
## {f "Icons" CmpImg3.tcl }
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## set xpm {
## {f "In Button" Xpm.tcl {i pixmap}}
## {f "In Menu" Xpm1.tcl {i pixmap}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## 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 }
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## 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}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## 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}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## 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}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## set scroll {
## {f ScrolledListBox SListBox.tcl }
## {f ScrolledText SText.tcl }
## {f ScrolledWindow SWindow.tcl }
##na {f "Canvas Object View" CObjView.tcl {c tixCObjView}}
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## set manager {
2002-11-13 22:44:08 -04:00
## {f ListNoteBook ListNBK.tcl }
2001-11-25 10:50:56 -04:00
##done {f NoteBook NoteBook.tcl }
##done {f PanedWindow PanedWin.tcl }
2001-11-11 10:07:37 -04:00
## }
2002-11-13 22:44:08 -04:00
##
2001-11-11 10:07:37 -04:00
## 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 }
2002-11-13 22:44:08 -04:00
## {f Meter Meter.tcl {c tixMeter}}
2001-11-11 10:07:37 -04:00
##done {f OptionMenu OptMenu.tcl }
##done {f PopupMenu PopMenu.tcl }
## {f Select Select.tcl }
## {f StdButtonBox StdBBox.tcl }
## }
##
2001-03-21 03:42:07 -04:00
stypes = { }
stypes [ ' widget ' ] = [ ' Balloon ' , ' Button Box ' , ' Combo Box ' , ' Control ' ,
2001-11-11 10:07:37 -04:00
' Directory List ' , ' Directory Tree ' ,
2001-11-25 10:50:56 -04:00
' Notebook ' , ' Option Menu ' , ' Popup Menu ' , ' Paned Window ' ,
2001-03-21 03:42:07 -04:00
' ScrolledHList (1) ' , ' ScrolledHList (2) ' , ' Tree (dynamic) ' ]
stypes [ ' image ' ] = [ ' Compound Image ' ]
def MkSample ( nb , name ) :
w = nb . page ( name )
2002-11-13 22:44:08 -04:00
options = " label.padX 4 "
2001-03-21 03:42:07 -04:00
2001-11-25 10:50:56 -04:00
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 '
2001-03-21 03:42:07 -04:00
2002-11-13 22:44:08 -04:00
lab = Tix . LabelFrame ( f1 , label = ' Select a sample program: ' )
lab . pack ( side = Tix . TOP , expand = 1 , fill = Tix . BOTH , padx = 5 , pady = 5 )
lab1 = Tix . LabelFrame ( f2 , label = ' Source: ' )
lab1 . pack ( side = Tix . TOP , expand = 1 , fill = Tix . BOTH , padx = 5 , pady = 5 )
2001-03-21 03:42:07 -04:00
2002-11-13 22:44:08 -04:00
slb = Tix . Tree ( lab . frame , options = ' hlist.width 20 ' )
2001-11-25 10:50:56 -04:00
slb . pack ( side = Tix . TOP , expand = 1 , fill = Tix . BOTH , padx = 5 )
2002-11-13 22:44:08 -04:00
stext = Tix . ScrolledText ( lab1 . frame , name = ' stext ' )
2001-11-11 10:07:37 -04:00
font = root . tk . eval ( ' tix option get fixed_font ' )
stext . text . config ( font = font )
2001-03-21 03:42:07 -04:00
2002-11-13 22:44:08 -04:00
frame = Tix . Frame ( lab1 . frame , name = ' frame ' )
2001-03-21 03:42:07 -04:00
2001-11-25 10:50:56 -04:00
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 )
2001-03-21 03:42:07 -04:00
stext . text [ ' bg ' ] = slb . hlist [ ' bg ' ]
stext . text [ ' state ' ] = ' disabled '
stext . text [ ' wrap ' ] = ' none '
2001-11-25 10:50:56 -04:00
stext . text [ ' width ' ] = 80
2001-03-21 03:42:07 -04:00
2002-11-13 22:44:08 -04:00
frame . pack ( side = Tix . BOTTOM , expand = 0 , fill = Tix . X , padx = 7 )
stext . pack ( side = Tix . TOP , expand = 0 , fill = Tix . BOTH , padx = 7 )
2001-03-21 03:42:07 -04:00
slb . hlist [ ' separator ' ] = ' . '
slb . hlist [ ' width ' ] = 25
slb . hlist [ ' drawbranch ' ] = 0
slb . hlist [ ' indent ' ] = 10
slb . hlist [ ' wideselect ' ] = 1
2001-11-25 10:50:56 -04:00
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 ' )
2001-03-21 03:42:07 -04:00
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 '
2001-11-25 10:50:56 -04:00
def Sample_Action ( w , slb , stext , run , view , action ) :
2001-03-21 03:42:07 -04:00
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 ) :
2001-11-11 10:07:37 -04:00
global root
2001-03-21 03:42:07 -04:00
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 ( )
2001-11-11 10:07:37 -04:00
font = root . tk . eval ( ' tix option get fixed_font ' )
t . text . config ( font = font )
2001-03-21 03:42:07 -04:00
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__ ' :
2001-11-11 10:07:37 -04:00
root = Tix . Tk ( )
RunMain ( root )
2001-03-21 03:42:07 -04:00