summaryrefslogtreecommitdiffstats
path: root/Demo/tix/samples/Tree.py
diff options
context:
space:
mode:
authorMartin v. Löwis <martin@v.loewis.de>2001-03-21 07:42:07 (GMT)
committerMartin v. Löwis <martin@v.loewis.de>2001-03-21 07:42:07 (GMT)
commitb21cb5fa7d4e820d470a4dc5a80544e0e0965c86 (patch)
treeff2e0a75e34e402934580db6c79ef1a714c4e140 /Demo/tix/samples/Tree.py
parent2c91c815d42b24254a08df148c5ee5aafd547abc (diff)
downloadcpython-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-xDemo/tix/samples/Tree.py80
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()