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/Tree.py | |
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/Tree.py')
-rwxr-xr-x | Demo/tix/samples/Tree.py | 80 |
1 files changed, 80 insertions, 0 deletions
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() |