1# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- 2# 3# $Id$ 4# 5# Tix Demonstration Program 6# 7# This sample program is structured in such a way so that it can be 8# executed from the Tix demo program "tixwidgets.py": it must have a 9# procedure called "RunSample". It should also have the "if" statment 10# at the end of this file so that it can be run as a standalone 11# program using tixwish. 12 13# This file demonstrates the use of the tixScrolledHList widget. 14# 15 16import Tix 17 18TCL_ALL_EVENTS = 0 19 20def RunSample (root): 21 shlist = DemoSHList(root) 22 shlist.mainloop() 23 shlist.destroy() 24 25class DemoSHList: 26 def __init__(self, w): 27 self.root = w 28 self.exit = -1 29 30 z = w.winfo_toplevel() 31 z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd()) 32 33 # We create the frame and the ScrolledHList widget 34 # at the top of the dialog box 35 # 36 top = Tix.Frame( w, relief=Tix.RAISED, bd=1) 37 38 # Put a simple hierachy into the HList (two levels). Use colors and 39 # separator widgets (frames) to make the list look fancy 40 # 41 top.a = Tix.ScrolledHList(top) 42 top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP) 43 44 # This is our little relational database 45 # 46 bosses = [ 47 ('jeff', 'Jeff Waxman'), 48 ('john', 'John Lee'), 49 ('peter', 'Peter Kenson') 50 ] 51 52 employees = [ 53 ('alex', 'john', 'Alex Kellman'), 54 ('alan', 'john', 'Alan Adams'), 55 ('andy', 'peter', 'Andreas Crawford'), 56 ('doug', 'jeff', 'Douglas Bloom'), 57 ('jon', 'peter', 'Jon Baraki'), 58 ('chris', 'jeff', 'Chris Geoffrey'), 59 ('chuck', 'jeff', 'Chuck McLean') 60 ] 61 62 hlist=top.a.hlist 63 64 # Let configure the appearance of the HList subwidget 65 # 66 hlist.config( separator='.', width=25, drawbranch=0, indent=10) 67 68 count=0 69 for boss,name in bosses : 70 if count : 71 f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150, 72 bd=2, relief=Tix.SUNKEN ) 73 74 hlist.add_child( itemtype=Tix.WINDOW, 75 window=f, state=Tix.DISABLED ) 76 77 hlist.add(boss, itemtype=Tix.TEXT, text=name) 78 count = count+1 79 80 81 for person,boss,name in employees : 82 # '.' is the separator character we chose above 83 # 84 key= boss + '.' + person 85 # ^^^^ ^^^^^^ 86 # parent entryPath / child's name 87 88 hlist.add( key, text=name ) 89 90 # [Hint] Make sure the keys (e.g. 'boss.person') you choose 91 # are unique names. If you cannot be sure of this (because of 92 # the structure of your database, e.g.) you can use the 93 # "add_child" command instead: 94 # 95 # hlist.addchild( boss, text=name) 96 # ^^^^ 97 # parent entryPath 98 99 100 # Use a ButtonBox to hold the buttons. 101 # 102 box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL ) 103 box.add( 'ok', text='Ok', underline=0, width=6, 104 command = self.okcmd) 105 106 box.add( 'cancel', text='Cancel', underline=0, width=6, 107 command = self.quitcmd) 108 109 box.pack( side=Tix.BOTTOM, fill=Tix.X) 110 top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 ) 111 112 def okcmd (self): 113 self.quitcmd() 114 115 def quitcmd (self): 116 self.exit = 0 117 118 def mainloop(self): 119 while self.exit < 0: 120 self.root.tk.dooneevent(TCL_ALL_EVENTS) 121 122 def destroy (self): 123 self.root.destroy() 124 125 126# This "if" statement makes it possible to run this script file inside or 127# outside of the main demo program "tixwidgets.py". 128# 129if __name__== '__main__' : 130 root=Tix.Tk() 131 RunSample(root) 132