f68af1f3b5883ec255688afecc96160857cb5aae
[profile/ivi/python.git] / Demo / tix / samples / DirTree.py
1 # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
2 #
3 #       $Id: DirTree.py 78779 2010-03-08 02:11:06Z benjamin.peterson $
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 using tixwish.
12
13 # This file demonstrates the use of the tixDirTree widget -- you can
14 # use it for the user to select a directory. For example, an installation
15 # program can use the tixDirTree widget to ask the user to select the
16 # installation directory for an application.
17 #
18
19 import Tix, os, copy
20 from Tkconstants import *
21
22 TCL_ALL_EVENTS          = 0
23
24 def RunSample (root):
25     dirtree = DemoDirTree(root)
26     dirtree.mainloop()
27     dirtree.destroy()
28
29 class DemoDirTree:
30     def __init__(self, w):
31         self.root = w
32         self.exit = -1
33
34         z = w.winfo_toplevel()
35         z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
36
37         # Create the tixDirTree and the tixLabelEntry widgets on the on the top
38         # of the dialog box
39
40         # bg = root.tk.eval('tix option get bg')
41         # adding bg=bg crashes Windows pythonw tk8.3.3 Python 2.1.0
42
43         top = Tix.Frame( w, relief=RAISED, bd=1)
44
45         # Create the DirTree widget. By default it will show the current
46         # directory
47         #
48         #
49         top.dir = Tix.DirTree(top)
50         top.dir.hlist['width'] = 40
51
52         # When the user presses the ".." button, the selected directory
53         # is "transferred" into the entry widget
54         #
55         top.btn = Tix.Button(top, text = "  >>  ", pady = 0)
56
57         # We use a LabelEntry to hold the installation directory. The user
58         # can choose from the DirTree widget, or he can type in the directory
59         # manually
60         #
61         top.ent = Tix.LabelEntry(top, label="Installation Directory:",
62                                   labelside = 'top',
63                                   options = '''
64                                   entry.width 40
65                                   label.anchor w
66                                   ''')
67
68         self.dlist_dir = copy.copy(os.curdir)
69         top.ent.entry['textvariable'] = self.dlist_dir
70         top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \
71                              self.copy_name(dir,ent)
72
73         top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () )
74
75         top.pack( expand='yes', fill='both', side=TOP)
76         top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT)
77         top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT)
78         top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT)
79
80         # Use a ButtonBox to hold the buttons.
81         #
82         box = Tix.ButtonBox (w, orientation='horizontal')
83         box.add ('ok', text='Ok', underline=0, width=6,
84                      command = lambda self=self: self.okcmd () )
85         box.add ('cancel', text='Cancel', underline=0, width=6,
86                      command = lambda self=self: self.quitcmd () )
87
88         box.pack( anchor='s', fill='x', side=BOTTOM)
89
90     def copy_name (self, dir, ent):
91         # This should work as it is the entry's textvariable
92         self.dlist_dir = dir.cget('value')
93         # but it isn't so I'll do it manually
94         ent.entry.delete(0,'end')
95         ent.entry.insert(0, self.dlist_dir)
96
97     def okcmd (self):
98         # tixDemo:Status "You have selected the directory" + self.dlist_dir
99         self.quitcmd()
100
101     def quitcmd (self):
102         # tixDemo:Status "You have selected the directory" + self.dlist_dir
103         self.exit = 0
104
105     def mainloop(self):
106         while self.exit < 0:
107             self.root.tk.dooneevent(TCL_ALL_EVENTS)
108
109     def destroy (self):
110         self.root.destroy()
111
112 # This "if" statement makes it possible to run this script file inside or
113 # outside of the main demo program "tixwidgets.py".
114 #
115 if __name__== '__main__' :
116     root=Tix.Tk()
117     RunSample(root)