diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2001-03-21 07:42:07 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2001-03-21 07:42:07 (GMT) |
commit | b21cb5fa7d4e820d470a4dc5a80544e0e0965c86 (patch) | |
tree | ff2e0a75e34e402934580db6c79ef1a714c4e140 /Demo/tix/samples | |
parent | 2c91c815d42b24254a08df148c5ee5aafd547abc (diff) | |
download | cpython-b21cb5fa7d4e820d470a4dc5a80544e0e0965c86.zip cpython-b21cb5fa7d4e820d470a4dc5a80544e0e0965c86.tar.gz cpython-b21cb5fa7d4e820d470a4dc5a80544e0e0965c86.tar.bz2 |
Patch #410231: Add the Python Tix library.
Diffstat (limited to 'Demo/tix/samples')
-rwxr-xr-x | Demo/tix/samples/Balloon.py | 45 | ||||
-rwxr-xr-x | Demo/tix/samples/BtnBox.py | 44 | ||||
-rwxr-xr-x | Demo/tix/samples/CmpImg.py | 197 | ||||
-rwxr-xr-x | Demo/tix/samples/ComboBox.py | 100 | ||||
-rwxr-xr-x | Demo/tix/samples/Control.py | 102 | ||||
-rwxr-xr-x | Demo/tix/samples/NoteBook.py | 119 | ||||
-rwxr-xr-x | Demo/tix/samples/OptMenu.py | 68 | ||||
-rwxr-xr-x | Demo/tix/samples/PopMenu.py | 56 | ||||
-rwxr-xr-x | Demo/tix/samples/SHList1.py | 107 | ||||
-rwxr-xr-x | Demo/tix/samples/SHList2.py | 148 | ||||
-rwxr-xr-x | Demo/tix/samples/Tree.py | 80 |
11 files changed, 1066 insertions, 0 deletions
diff --git a/Demo/tix/samples/Balloon.py b/Demo/tix/samples/Balloon.py new file mode 100755 index 0000000..df90660 --- /dev/null +++ b/Demo/tix/samples/Balloon.py @@ -0,0 +1,45 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixBalloon widget, which provides +# a interesting way to give help tips about elements in your user interface. +# Your can display the help message in a "balloon" and a status bar widget. +# + +import Tix + +def RunSample(w): + status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1) + status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1) + + # Create two mysterious widgets that need balloon help + button1 = Tix.Button(w, text='Something Unexpected', + command=lambda w=w: w.destroy()) + button2 = Tix.Button(w, text='Something Else Unexpected') + button2['command'] = lambda w=button2: w.destroy() + button1.pack(side=Tix.TOP, expand=1) + button2.pack(side=Tix.TOP, expand=1) + + # Create the balloon widget and associate it with the widgets that we want + # to provide tips for: + b = Tix.Balloon(w, statusbar=status) + + b.bind_widget(button1, balloonmsg='Close Window', + statusmsg='Press this button to close this window') + b.bind_widget(button2, balloonmsg='Self-destruct button', + statusmsg='Press this button and it will destroy itself') + +if __name__ == '__main__': + root = Tix.Tk() + + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/BtnBox.py b/Demo/tix/samples/BtnBox.py new file mode 100755 index 0000000..f21cc15 --- /dev/null +++ b/Demo/tix/samples/BtnBox.py @@ -0,0 +1,44 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixButtonBox widget, which is a +# group of TK buttons. You can use it to manage the buttons in a dialog box, +# for example. +# + +import Tix + +def RunSample(w): + # Create the label on the top of the dialog box + # + top = Tix.Label(w, padx=20, pady=10, bd=1, relief=Tix.RAISED, + anchor=Tix.CENTER, text='This dialog box is\n a demonstration of the\n tixButtonBox widget') + + # Create the button box and add a few buttons in it. Set the + # -width of all the buttons to the same value so that they + # appear in the same size. + # + # Note that the -text, -underline, -command and -width options are all + # standard options of the button widgets. + # + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='OK', underline=0, width=5, + command=lambda w=w: w.destroy()) + box.add('close', text='Cancel', underline=0, width=5, + command=lambda w=w: w.destroy()) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/CmpImg.py b/Demo/tix/samples/CmpImg.py new file mode 100755 index 0000000..4e03bc1 --- /dev/null +++ b/Demo/tix/samples/CmpImg.py @@ -0,0 +1,197 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the compound images: it uses compound +# images to display a text string together with a pixmap inside +# buttons +# + +import Tix + +network_pixmap = """/* XPM */ +static char * netw_xpm[] = { +/* width height ncolors chars_per_pixel */ +"32 32 7 1", +/* colors */ +" s None c None", +". c #000000000000", +"X c white", +"o c #c000c000c000", +"O c #404040", +"+ c blue", +"@ c red", +/* pixels */ +" ", +" .............. ", +" .XXXXXXXXXXXX. ", +" .XooooooooooO. ", +" .Xo.......XoO. ", +" .Xo.++++o+XoO. ", +" .Xo.++++o+XoO. ", +" .Xo.++oo++XoO. ", +" .Xo.++++++XoO. ", +" .Xo.+o++++XoO. ", +" .Xo.++++++XoO. ", +" .Xo.XXXXXXXoO. ", +" .XooooooooooO. ", +" .Xo@ooo....oO. ", +" .............. .XooooooooooO. ", +" .XXXXXXXXXXXX. .XooooooooooO. ", +" .XooooooooooO. .OOOOOOOOOOOO. ", +" .Xo.......XoO. .............. ", +" .Xo.++++o+XoO. @ ", +" .Xo.++++o+XoO. @ ", +" .Xo.++oo++XoO. @ ", +" .Xo.++++++XoO. @ ", +" .Xo.+o++++XoO. @ ", +" .Xo.++++++XoO. ..... ", +" .Xo.XXXXXXXoO. .XXX. ", +" .XooooooooooO.@@@@@@.X O. ", +" .Xo@ooo....oO. .OOO. ", +" .XooooooooooO. ..... ", +" .XooooooooooO. ", +" .OOOOOOOOOOOO. ", +" .............. ", +" "}; +""" + +hard_disk_pixmap = """/* XPM */ +static char * drivea_xpm[] = { +/* width height ncolors chars_per_pixel */ +"32 32 5 1", +/* colors */ +" s None c None", +". c #000000000000", +"X c white", +"o c #c000c000c000", +"O c #800080008000", +/* pixels */ +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" .......................... ", +" .XXXXXXXXXXXXXXXXXXXXXXXo. ", +" .XooooooooooooooooooooooO. ", +" .Xooooooooooooooooo..oooO. ", +" .Xooooooooooooooooo..oooO. ", +" .XooooooooooooooooooooooO. ", +" .Xoooooooo.......oooooooO. ", +" .Xoo...................oO. ", +" .Xoooooooo.......oooooooO. ", +" .XooooooooooooooooooooooO. ", +" .XooooooooooooooooooooooO. ", +" .XooooooooooooooooooooooO. ", +" .XooooooooooooooooooooooO. ", +" .oOOOOOOOOOOOOOOOOOOOOOOO. ", +" .......................... ", +" ", +" ", +" ", +" ", +" ", +" ", +" ", +" "}; +""" + +network_bitmap = """ +#define netw_width 32 +#define netw_height 32 +static unsigned char netw_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, 0x02, 0x40, + 0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x52, + 0x00, 0x00, 0x0a, 0x52, 0x00, 0x00, 0x8a, 0x51, 0x00, 0x00, 0x0a, 0x50, + 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x0a, 0x50, 0x00, 0x00, 0x0a, 0x50, + 0x00, 0x00, 0xfa, 0x5f, 0x00, 0x00, 0x02, 0x40, 0xfe, 0x7f, 0x52, 0x55, + 0x02, 0x40, 0xaa, 0x6a, 0xfa, 0x5f, 0xfe, 0x7f, 0x0a, 0x50, 0xfe, 0x7f, + 0x0a, 0x52, 0x80, 0x00, 0x0a, 0x52, 0x80, 0x00, 0x8a, 0x51, 0x80, 0x00, + 0x0a, 0x50, 0x80, 0x00, 0x4a, 0x50, 0x80, 0x00, 0x0a, 0x50, 0xe0, 0x03, + 0x0a, 0x50, 0x20, 0x02, 0xfa, 0xdf, 0x3f, 0x03, 0x02, 0x40, 0xa0, 0x02, + 0x52, 0x55, 0xe0, 0x03, 0xaa, 0x6a, 0x00, 0x00, 0xfe, 0x7f, 0x00, 0x00, + 0xfe, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +""" + +hard_disk_bitmap = """ +#define drivea_width 32 +#define drivea_height 32 +static unsigned char drivea_bits[] = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xf8, 0xff, 0xff, 0x1f, 0x08, 0x00, 0x00, 0x18, 0xa8, 0xaa, 0xaa, 0x1a, + 0x48, 0x55, 0xd5, 0x1d, 0xa8, 0xaa, 0xaa, 0x1b, 0x48, 0x55, 0x55, 0x1d, + 0xa8, 0xfa, 0xaf, 0x1a, 0xc8, 0xff, 0xff, 0x1d, 0xa8, 0xfa, 0xaf, 0x1a, + 0x48, 0x55, 0x55, 0x1d, 0xa8, 0xaa, 0xaa, 0x1a, 0x48, 0x55, 0x55, 0x1d, + 0xa8, 0xaa, 0xaa, 0x1a, 0xf8, 0xff, 0xff, 0x1f, 0xf8, 0xff, 0xff, 0x1f, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}; +""" + +def RunSample(w): + w.img0 = Tix.Image('pixmap', data=network_pixmap) + if not w.img0: + w.img0 = Tix.Image('bitmap', data=network_bitmap) + w.img1 = Tix.Image('pixmap', data=hard_disk_pixmap) + if not w.img0: + w.img1 = Tix.Image('bitmap', data=hard_disk_bitmap) + + hdd = Tix.Button(w, padx=4, pady=1, width=120) + net = Tix.Button(w, padx=4, pady=1, width=120) + + # Create the first image: we create a line, then put a string, + # a space and a image into this line, from left to right. + # The result: we have a one-line image that consists of three + # individual items + # + # The tk.calls should be methods in Tix ... + w.hdd_img = Tix.Image('compound', window=hdd) + w.hdd_img.tk.call(str(w.hdd_img), 'add', 'line') + w.hdd_img.tk.call(str(w.hdd_img), 'add', 'text', '-text', 'Hard Disk', + '-underline', '0') + w.hdd_img.tk.call(str(w.hdd_img), 'add', 'space', '-width', '7') + w.hdd_img.tk.call(str(w.hdd_img), 'add', 'image', '-image', w.img1) + + # Put this image into the first button + # + hdd['image'] = w.hdd_img + + # Next button + w.net_img = Tix.Image('compound', window=net) + w.net_img.tk.call(str(w.net_img), 'add', 'line') + w.net_img.tk.call(str(w.net_img), 'add', 'text', '-text', 'Network', + '-underline', '0') + w.net_img.tk.call(str(w.net_img), 'add', 'space', '-width', '7') + w.net_img.tk.call(str(w.net_img), 'add', 'image', '-image', w.img0) + + # Put this image into the first button + # + net['image'] = w.net_img + + close = Tix.Button(w, pady=1, text='Close', + command=lambda w=w: w.destroy()) + + hdd.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1) + net.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1) + close.pack(side=Tix.LEFT, padx=10, pady=10, fill=Tix.Y, expand=1) + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() + diff --git a/Demo/tix/samples/ComboBox.py b/Demo/tix/samples/ComboBox.py new file mode 100755 index 0000000..84b1b30 --- /dev/null +++ b/Demo/tix/samples/ComboBox.py @@ -0,0 +1,100 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixComboBox widget, which is close +# to the MS Window Combo Box control. +# +import Tix + +def RunSample(w): + global demo_month, demo_year + + top = Tix.Frame(w, bd=1, relief=Tix.RAISED) + + demo_month = Tix.StringVar() + demo_year = Tix.StringVar() + + # $w.top.a is a drop-down combo box. It is not editable -- who wants + # to invent new months? + # + # [Hint] The -options switch sets the options of the subwidgets. + # [Hint] We set the label.width subwidget option of both comboboxes to + # be 10 so that their labels appear to be aligned. + # + a = Tix.ComboBox(top, label="Month: ", dropdown=1, + command=select_month, editable=0, variable=demo_month, + options='listbox.height 6 label.width 10 label.anchor e') + + # $w.top.b is a non-drop-down combo box. It is not editable: we provide + # four choices for the user, but he can enter an alternative year if he + # wants to. + # + # [Hint] Use the padY and anchor options of the label subwidget to + # align the label with the entry subwidget. + # [Hint] Notice that you should use padY (the NAME of the option) and not + # pady (the SWITCH of the option). + # + b = Tix.ComboBox(top, label="Year: ", dropdown=0, + command=select_year, editable=1, variable=demo_year, + options='listbox.height 4 label.padY 5 label.width 10 label.anchor ne') + + a.pack(side=Tix.TOP, anchor=Tix.W) + b.pack(side=Tix.TOP, anchor=Tix.W) + + a.insert(Tix.END, 'January') + a.insert(Tix.END, 'February') + a.insert(Tix.END, 'March') + a.insert(Tix.END, 'April') + a.insert(Tix.END, 'May') + a.insert(Tix.END, 'June') + a.insert(Tix.END, 'July') + a.insert(Tix.END, 'August') + a.insert(Tix.END, 'September') + a.insert(Tix.END, 'October') + a.insert(Tix.END, 'November') + a.insert(Tix.END, 'December') + + b.insert(Tix.END, '1992') + b.insert(Tix.END, '1993') + b.insert(Tix.END, '1994') + b.insert(Tix.END, '1995') + b.insert(Tix.END, '1996') + + # Use "tixSetSilent" to set the values of the combo box if you + # don't want your -command procedures (cbx:select_month and + # cbx:select_year) to be called. + # + a.set_silent('January') + b.set_silent('1995') + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='Ok', underline=0, width=6, + command=lambda w=w: ok_command(w)) + box.add('cancel', text='Cancel', underline=0, width=6, + command=lambda w=w: w.destroy()) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +def select_month(event=None): + print "Month =", demo_month.get() + +def select_year(event=None): + print "Year =", demo_year.get() + +def ok_command(w): + print "Month =", demo_month.get(), ", Year=", demo_year.get() + w.destroy() + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/Control.py b/Demo/tix/samples/Control.py new file mode 100755 index 0000000..b8e1156 --- /dev/null +++ b/Demo/tix/samples/Control.py @@ -0,0 +1,102 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixControl widget -- it is an +# entry widget with up/down arrow buttons. You can use the arrow buttons +# to adjust the value inside the entry widget. +# +# This example program uses three Control widgets. One lets you select +# integer values; one lets you select floating point values and the last +# one lets you select a few names. +# +import Tix + +def RunSample(w): + global demo_maker, demo_thrust, demo_num_engines + + demo_maker = Tix.StringVar() + demo_thrust = Tix.DoubleVar() + demo_num_engines = Tix.IntVar() + demo_maker.set('P&W') + demo_thrust.set(20000.0) + demo_num_engines.set(2) + + top = Tix.Frame(w, bd=1, relief=Tix.RAISED) + + # $w.top.a allows only integer values + # + # [Hint] The -options switch sets the options of the subwidgets. + # [Hint] We set the label.width subwidget option of the Controls to + # be 16 so that their labels appear to be aligned. + # + a = Tix.Control(top, label='Number of Engines: ', integer=1, + variable=demo_num_engines, min=1, max=4, + options='entry.width 10 label.width 20 label.anchor e') + + b = Tix.Control(top, label='Thrust: ', integer=0, + min='10000.0', max='60000.0', step=500, + variable=demo_thrust, + options='entry.width 10 label.width 20 label.anchor e') + + c = Tix.Control(top, label='Engine Maker: ', value='P&W', + variable=demo_maker, + options='entry.width 10 label.width 20 label.anchor e') + + # We can't define these in the init because the widget 'c' doesn't + # exist yet and we need to reference it + c['incrcmd'] = lambda w=c: adjust_maker(w, 1) + c['decrcmd'] = lambda w=c: adjust_maker(w, -1) + c['validatecmd'] = lambda w=c: validate_maker(w) + + a.pack(side=Tix.TOP, anchor=Tix.W) + b.pack(side=Tix.TOP, anchor=Tix.W) + c.pack(side=Tix.TOP, anchor=Tix.W) + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='Ok', underline=0, width=6, + command=lambda w=w: ok_command(w)) + box.add('cancel', text='Cancel', underline=0, width=6, + command=lambda w=w: w.destroy()) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +maker_list = ['P&W', 'GE', 'Rolls Royce'] + +def adjust_maker(w, inc): + i = maker_list.index(demo_maker.get()) + i = i + inc + if i >= len(maker_list): + i = 0 + elif i < 0: + i = len(maker_list) - 1 + + # In Tcl/Tix we should return the string maker_list[i]. We can't + # do that in Tkinter so we set the global variable. (This works). + demo_maker.set(maker_list[i]) + +def validate_maker(w): + try: + i = maker_list.index(demo_maker.get()) + except: + # Works here though. Why ? Beats me. + return maker_list[0] + # Works here though. Why ? Beats me. + return maker_list[i] + +def ok_command(w): + print "Selected", demo_num_engines.get(), "of", demo_maker.get(), " engines each of thrust", demo_thrust.get() + w.destroy() + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/NoteBook.py b/Demo/tix/samples/NoteBook.py new file mode 100755 index 0000000..993dcc6 --- /dev/null +++ b/Demo/tix/samples/NoteBook.py @@ -0,0 +1,119 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixNoteBook widget, which allows +# you to lay out your interface using a "notebook" metaphore +# +import Tix + +def RunSample(w): + global root + root = w + + # We use these options to set the sizes of the subwidgets inside the + # notebook, so that they are well-aligned on the screen. + prefix = Tix.OptionName(w) + if prefix: + prefix = '*'+prefix + else: + 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) + + # Create the notebook widget and set its backpagecolor to gray. + # Note that the -backpagecolor option belongs to the "nbframe" + # subwidget. + nb = Tix.NoteBook(w, name='nb', ipadx=6, ipady=6) + nb['bg'] = 'gray' + nb.nbframe['backpagecolor'] = 'gray' + + # Create the two tabs on the notebook. The -underline option + # puts a underline on the first character of the labels of the tabs. + # Keyboard accelerators will be defined automatically according + # to the underlined character. + nb.add('hard_disk', label="Hard Disk", underline=0) + nb.add('network', label="Network", underline=0) + + nb.pack(expand=1, fill=Tix.BOTH, padx=5, pady=5 ,side=Tix.TOP) + + #---------------------------------------- + # Create the first page + #---------------------------------------- + # Create two frames: one for the common buttons, one for the + # other widgets + # + tab=nb.hard_disk + f = Tix.Frame(tab) + common = Tix.Frame(tab) + + f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1) + common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y) + + a = Tix.Control(f, value=12, label='Access time: ') + w = Tix.Control(f, value=400, label='Write Throughput: ') + r = Tix.Control(f, value=400, label='Read Throughput: ') + c = Tix.Control(f, 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) + + # Create the common buttons + createCommonButtons(common) + + #---------------------------------------- + # Create the second page + #---------------------------------------- + + tab = nb.network + + f = Tix.Frame(tab) + common = Tix.Frame(tab) + + f.pack(side=Tix.LEFT, padx=2, pady=2, fill=Tix.BOTH, expand=1) + common.pack(side=Tix.RIGHT, padx=2, fill=Tix.Y) + + a = Tix.Control(f, value=12, label='Access time: ') + w = Tix.Control(f, value=400, label='Write Throughput: ') + r = Tix.Control(f, value=400, label='Read Throughput: ') + c = Tix.Control(f, value=1021, label='Capacity: ') + u = Tix.Control(f, 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) + + createCommonButtons(common) + +def doDestroy(): + global root + root.destroy() + +def createCommonButtons(master): + ok = Tix.Button(master, name='ok', text='OK', width=6, + command=doDestroy) + cancel = Tix.Button(master, name='cancel', + text='Cancel', width=6, + command=doDestroy) + + ok.pack(side=Tix.TOP, padx=2, pady=2) + cancel.pack(side=Tix.TOP, padx=2, pady=2) + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/OptMenu.py b/Demo/tix/samples/OptMenu.py new file mode 100755 index 0000000..2d05938 --- /dev/null +++ b/Demo/tix/samples/OptMenu.py @@ -0,0 +1,68 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates the use of the tixOptionMenu widget -- you can +# use it for the user to choose from a fixed set of options +# +import Tix + +options = {'text':'Plain Text', 'post':'PostScript', 'html':'HTML', + 'tex':'LaTeX', 'rtf':'Rich Text Format'} + +def RunSample(w): + global demo_opt_from, demo_opt_to + + demo_opt_from = Tix.StringVar() + demo_opt_to = Tix.StringVar() + + top = Tix.Frame(w, bd=1, relief=Tix.RAISED) + + from_file = Tix.OptionMenu(top, label="From File Format : ", + variable=demo_opt_from, + options = 'label.width 19 label.anchor e menubutton.width 15') + + to_file = Tix.OptionMenu(top, label="To File Format : ", + variable=demo_opt_to, + options='label.width 19 label.anchor e menubutton.width 15') + + # Add the available options to the two OptionMenu widgets + # + # [Hint] You have to add the options first before you set the + # global variables "demo_opt_from" and "demo_opt_to". Otherwise + # the OptionMenu widget will complain about "unknown options"! + # + for opt in options.keys(): + from_file.add_command(opt, label=options[opt]) + to_file.add_command(opt, label=options[opt]) + + demo_opt_from.set('html') + demo_opt_to.set('post') + + from_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6) + to_file.pack(side=Tix.TOP, anchor=Tix.W, pady=3, padx=6) + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='Ok', underline=0, width=6, + command=lambda w=w: ok_command(w)) + box.add('cancel', text='Cancel', underline=0, width=6, + command=lambda w=w: w.destroy()) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +def ok_command(w): + print "Convert file from", demo_opt_from.get(), " to", demo_opt_to.get() + w.destroy() + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/PopMenu.py b/Demo/tix/samples/PopMenu.py new file mode 100755 index 0000000..c2301cf --- /dev/null +++ b/Demo/tix/samples/PopMenu.py @@ -0,0 +1,56 @@ +# Tix Demostration Program +# +# $Id$ +# +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "widget": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program using tixwish. + +# This file demonstrates the use of the tixPopupMenu widget. +# +import Tix + +def RunSample(w): + # We create the frame and the button, then we'll bind the PopupMenu + # to both widgets. The result is, when you press the right mouse + # button over $w.top or $w.top.but, the PopupMenu will come up. + # + top = Tix.Frame(w, relief=Tix.RAISED, bd=1) + but = Tix.Button(top, text='Press the right mouse button over this button or its surrounding area') + but.pack(expand=1, fill=Tix.BOTH, padx=50, pady=50) + + p = Tix.PopupMenu(top, title='Popup Test') + p.bind_widget(top) + p.bind_widget(but) + + # Set the entries inside the PopupMenu widget. + # [Hint] You have to manipulate the "menu" subwidget. + # $w.top.p itself is NOT a menu widget. + # [Hint] Watch carefully how the sub-menu is created + # + p.menu.add_command(label='Desktop', underline=0) + p.menu.add_command(label='Select', underline=0) + p.menu.add_command(label='Find', underline=0) + p.menu.add_command(label='System', underline=1) + p.menu.add_command(label='Help', underline=0) + m1 = Tix.Menu(p.menu) + m1.add_command(label='Hello') + p.menu.add_cascade(label='More', menu=m1) + + but.pack(side=Tix.TOP, padx=40, pady=50) + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='Ok', underline=0, width=6, + command=lambda w=w: w.destroy()) + box.add('cancel', text='Cancel', underline=0, width=6, + command=lambda w=w: w.destroy()) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/SHList1.py b/Demo/tix/samples/SHList1.py new file mode 100755 index 0000000..5122bbc --- /dev/null +++ b/Demo/tix/samples/SHList1.py @@ -0,0 +1,107 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program using tixwish. + +# This file demonstrates the use of the tixScrolledHList widget. +# + +import Tix + +def RunSample (w) : + + # We create the frame and the ScrolledHList widget + # at the top of the dialog box + # + top = Tix.Frame( w, relief=Tix.RAISED, bd=1) + + # Put a simple hierachy into the HList (two levels). Use colors and + # separator widgets (frames) to make the list look fancy + # + top.a = Tix.ScrolledHList(top) + top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP) + + + # This is our little relational database + # + bosses = [ + ('jeff', 'Jeff Waxman'), + ('john', 'John Lee'), + ('peter', 'Peter Kenson') + ] + + employees = [ + ('alex', 'john', 'Alex Kellman'), + ('alan', 'john', 'Alan Adams'), + ('andy', 'peter', 'Andreas Crawford'), + ('doug', 'jeff', 'Douglas Bloom'), + ('jon', 'peter', 'Jon Baraki'), + ('chris', 'jeff', 'Chris Geoffrey'), + ('chuck', 'jeff', 'Chuck McLean') + ] + + hlist=top.a.hlist + + # Let configure the appearance of the HList subwidget + # + hlist.config( separator='.', width=25, drawbranch=0, indent=10) + + count=0 + for boss,name in bosses : + if count : + f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150, + bd=2, relief=Tix.SUNKEN, bg=hlist['bg'] ) + + hlist.add_child( itemtype=Tix.WINDOW, + window=f, state=Tix.DISABLED ) + + hlist.add(boss, itemtype=Tix.TEXT, text=name) + count = count+1 + + + for person,boss,name in employees : + # '.' is the separator character we chose above + # + key= boss + '.' + person + # ^^^^ ^^^^^^ + # parent entryPath / child's name + + hlist.add( key, text=name ) + + # [Hint] Make sure the keys (e.g. 'boss.person') you choose + # are unique names. If you cannot be sure of this (because of + # the structure of your database, e.g.) you can use the + # "add_child" command instead: + # + # hlist.addchild( boss, text=name) + # ^^^^ + # parent entryPath + + + # Use a ButtonBox to hold the buttons. + # + box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL ) + box.add( 'ok', text='Ok', underline=0, width=6, + command = lambda w=w: w.destroy() ) + + box.add( 'cancel', text='Cancel', underline=0, width=6, + command = lambda w=w: w.destroy() ) + + box.pack( side=Tix.BOTTOM, fill=Tix.X) + top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 ) + + +# This "if" statement makes it possible to run this script file inside or +# outside of the main demo program "widget". +# +if __name__== '__main__' : + root=Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/SHList2.py b/Demo/tix/samples/SHList2.py new file mode 100755 index 0000000..e1a7a7c --- /dev/null +++ b/Demo/tix/samples/SHList2.py @@ -0,0 +1,148 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the PyTix demo program "tixwidget": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program using tixwish. + +# This file demonstrates how to use multiple columns and multiple styles +# in the tixHList widget +# +# In a tixHList widget, you can have one ore more columns. +# + +import Tix + +def RunSample (w) : + + # We create the frame and the ScrolledHList widget + # at the top of the dialog box + # + top = Tix.Frame( w, relief=Tix.RAISED, bd=1) + + # Put a simple hierachy into the HList (two levels). Use colors and + # separator widgets (frames) to make the list look fancy + # + top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' ) + + top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP) + + hlist=top.a.hlist + + # Create the title for the HList widget + # >> Notice that we have set the hlist.header subwidget option to true + # so that the header is displayed + # + + boldfont=hlist.tk.call('tix','option','get','bold_font') + + # First some styles for the headers + style={} + style['header'] = Tix.DisplayStyle(Tix.TEXT, fg='black', refwindow=top, + anchor=Tix.CENTER, padx=8, pady=2, font = boldfont ) + + hlist.header_create(0, itemtype=Tix.TEXT, text='Name', + style=style['header']) + hlist.header_create(1, itemtype=Tix.TEXT, text='Position', + style=style['header']) + + # Notice that we use 3 columns in the hlist widget. This way when the user + # expands the windows wide, the right side of the header doesn't look + # chopped off. The following line ensures that the 3 column header is + # not shown unless the hlist window is wider than its contents. + # + hlist.column_width(2,0) + + # This is our little relational database + # + boss = ('doe', 'John Doe', 'Director') + + managers = [ + ('jeff', 'Jeff Waxman', 'Manager'), + ('john', 'John Lee', 'Manager'), + ('peter', 'Peter Kenson', 'Manager') + ] + + employees = [ + ('alex', 'john', 'Alex Kellman', 'Clerk'), + ('alan', 'john', 'Alan Adams', 'Clerk'), + ('andy', 'peter', 'Andreas Crawford', 'Salesman'), + ('doug', 'jeff', 'Douglas Bloom', 'Clerk'), + ('jon', 'peter', 'Jon Baraki', 'Salesman'), + ('chris', 'jeff', 'Chris Geoffrey', 'Clerk'), + ('chuck', 'jeff', 'Chuck McLean', 'Cleaner') + ] + + style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top, + fg='#202060', selectforeground = '#202060', font = boldfont ) + + style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=top, + fg='#202060', selectforeground='#202060' ) + + style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top, + fg='#602020', selectforeground = '#602020', font = boldfont ) + + style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=top, + fg='#602020', selectforeground = '#602020' ) + + # Let configure the appearance of the HList subwidget + # + hlist.config(separator='.', width=25, drawbranch=0, indent=10) + hlist.column_width(0, chars=20) + + # Create the boss + # + hlist.add ('.', itemtype=Tix.TEXT, text=boss[1], + style=style['mgr_name']) + hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2], + style=style['mgr_posn']) + + # Create the managers + # + + for key,name,posn in managers : + e= '.'+ key + hlist.add(e, itemtype=Tix.TEXT, text=name, + style=style['mgr_name']) + hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn, + style=style['mgr_posn']) + + + for key,mgr,name,posn in employees : + # "." is the separator character we chose above + + entrypath = '.' + mgr + '.' + key + + # ^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^ + # parent entryPath / child's name + + hlist.add(entrypath, text=name, style=style['empl_name']) + hlist.item_create(entrypath, 1, itemtype=Tix.TEXT, + text = posn, style = style['empl_posn'] ) + + + # Use a ButtonBox to hold the buttons. + # + box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL ) + box.add( 'ok', text='Ok', underline=0, width=6, + command = lambda w=w: w.destroy() ) + + box.add( 'cancel', text='Cancel', underline=0, width=6, + command = lambda w=w: w.destroy() ) + + box.pack( side=Tix.BOTTOM, fill=Tix.X) + top.pack( side=Tix.TOP, fill=Tix.BOTH, expand=1 ) + + +# This "if" statement makes it possible to run this script file inside or +# outside of the main demo program "widget". +# +if __name__== '__main__' : + root=Tix.Tk() + RunSample(root) + root.mainloop() diff --git a/Demo/tix/samples/Tree.py b/Demo/tix/samples/Tree.py new file mode 100755 index 0000000..b0520fb --- /dev/null +++ b/Demo/tix/samples/Tree.py @@ -0,0 +1,80 @@ +#!/usr/local/bin/python +# +# $Id$ +# +# Tix Demostration Program +# +# This sample program is structured in such a way so that it can be +# executed from the Tix demo program "tixwidgets": it must have a +# procedure called "RunSample". It should also have the "if" statment +# at the end of this file so that it can be run as a standalone +# program. + +# This file demonstrates how to use the TixTree widget to display +# dynamic hierachical data (the files in the Unix file system) +# + +import Tix, os + +def RunSample(w): + top = Tix.Frame(w, relief=Tix.RAISED, bd=1) + tree = Tix.Tree(top, options='separator "/"') + tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT) + tree['opencmd'] = lambda dir=None, w=tree: opendir(w, dir) + + # The / directory is added in the "open" mode. The user can open it + # and then browse its subdirectories ... + adddir(tree, "/") + + box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL) + box.add('ok', text='Ok', underline=0, command=w.destroy, width=6) + box.add('cancel', text='Cancel', underline=0, command=w.destroy, width=6) + box.pack(side=Tix.BOTTOM, fill=Tix.X) + top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1) + +def adddir(tree, dir): + if dir == '/': + text = '/' + else: + text = os.path.basename(dir) + tree.hlist.add(dir, itemtype=Tix.IMAGETEXT, text=text, + image=tree.tk.call('tix', 'getimage', 'folder')) + try: + os.listdir(dir) + tree.setmode(dir, 'open') + except os.error: + # No read permission ? + pass + +# This function is called whenever the user presses the (+) indicator or +# double clicks on a directory whose mode is "open". It loads the files +# inside that directory into the Tree widget. +# +# Note we didn't specify the closecmd option for the Tree widget, so it +# performs the default action when the user presses the (-) indicator or +# double clicks on a directory whose mode is "close": hide all of its child +# entries +def opendir(tree, dir): + entries = tree.hlist.info_children(dir) + if entries: + # We have already loaded this directory. Let's just + # show all the child entries + # + # Note: since we load the directory only once, it will not be + # refreshed if the you add or remove files from this + # directory. + # + for entry in entries: + tree.hlist.show_entry(entry) + files = os.listdir(dir) + for file in files: + if os.path.isdir(dir + '/' + file): + adddir(tree, dir + '/' + file) + else: + tree.hlist.add(dir + '/' + file, itemtype=Tix.IMAGETEXT, text=file, + image=tree.tk.call('tix', 'getimage', 'file')) + +if __name__ == '__main__': + root = Tix.Tk() + RunSample(root) + root.mainloop() |