1 | # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
|
---|
2 | #
|
---|
3 | # $Id$
|
---|
4 | #
|
---|
5 | # Tix Demostration 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.
|
---|
12 |
|
---|
13 | # This file demonstrates how to use the TixTree widget to display
|
---|
14 | # dynamic hierachical data (the files in the Unix file system)
|
---|
15 | #
|
---|
16 |
|
---|
17 | import Tix, os
|
---|
18 |
|
---|
19 | def RunSample(w):
|
---|
20 | top = Tix.Frame(w, relief=Tix.RAISED, bd=1)
|
---|
21 | tree = Tix.Tree(top, options='separator "/"')
|
---|
22 | tree.pack(expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.LEFT)
|
---|
23 | tree['opencmd'] = lambda dir=None, w=tree: opendir(w, dir)
|
---|
24 |
|
---|
25 | # The / directory is added in the "open" mode. The user can open it
|
---|
26 | # and then browse its subdirectories ...
|
---|
27 | adddir(tree, "/")
|
---|
28 |
|
---|
29 | box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
|
---|
30 | box.add('ok', text='Ok', underline=0, command=w.destroy, width=6)
|
---|
31 | box.add('cancel', text='Cancel', underline=0, command=w.destroy, width=6)
|
---|
32 | box.pack(side=Tix.BOTTOM, fill=Tix.X)
|
---|
33 | top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
|
---|
34 |
|
---|
35 | def adddir(tree, dir):
|
---|
36 | if dir == '/':
|
---|
37 | text = '/'
|
---|
38 | else:
|
---|
39 | text = os.path.basename(dir)
|
---|
40 | tree.hlist.add(dir, itemtype=Tix.IMAGETEXT, text=text,
|
---|
41 | image=tree.tk.call('tix', 'getimage', 'folder'))
|
---|
42 | try:
|
---|
43 | os.listdir(dir)
|
---|
44 | tree.setmode(dir, 'open')
|
---|
45 | except os.error:
|
---|
46 | # No read permission ?
|
---|
47 | pass
|
---|
48 |
|
---|
49 | # This function is called whenever the user presses the (+) indicator or
|
---|
50 | # double clicks on a directory whose mode is "open". It loads the files
|
---|
51 | # inside that directory into the Tree widget.
|
---|
52 | #
|
---|
53 | # Note we didn't specify the closecmd option for the Tree widget, so it
|
---|
54 | # performs the default action when the user presses the (-) indicator or
|
---|
55 | # double clicks on a directory whose mode is "close": hide all of its child
|
---|
56 | # entries
|
---|
57 | def opendir(tree, dir):
|
---|
58 | entries = tree.hlist.info_children(dir)
|
---|
59 | if entries:
|
---|
60 | # We have already loaded this directory. Let's just
|
---|
61 | # show all the child entries
|
---|
62 | #
|
---|
63 | # Note: since we load the directory only once, it will not be
|
---|
64 | # refreshed if the you add or remove files from this
|
---|
65 | # directory.
|
---|
66 | #
|
---|
67 | for entry in entries:
|
---|
68 | tree.hlist.show_entry(entry)
|
---|
69 | files = os.listdir(dir)
|
---|
70 | for file in files:
|
---|
71 | if os.path.isdir(dir + '/' + file):
|
---|
72 | adddir(tree, dir + '/' + file)
|
---|
73 | else:
|
---|
74 | tree.hlist.add(dir + '/' + file, itemtype=Tix.IMAGETEXT, text=file,
|
---|
75 | image=tree.tk.call('tix', 'getimage', 'file'))
|
---|
76 |
|
---|
77 | if __name__ == '__main__':
|
---|
78 | root = Tix.Tk()
|
---|
79 | RunSample(root)
|
---|
80 | root.mainloop()
|
---|