|
1 # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- |
|
2 # |
|
3 # $Id: DirList.py 36560 2004-07-18 06:16:08Z tim_one $ |
|
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 tixDirList widget -- you can |
|
14 # use it for the user to select a directory. For example, an installation |
|
15 # program can use the tixDirList 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 dirlist = DemoDirList(root) |
|
26 dirlist.mainloop() |
|
27 dirlist.destroy() |
|
28 |
|
29 class DemoDirList: |
|
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 tixDirList 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 DirList widget. By default it will show the current |
|
46 # directory |
|
47 # |
|
48 # |
|
49 top.dir = Tix.DirList(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 DirList 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 font = self.root.tk.eval('tix option get fixed_font') |
|
69 # font = self.root.master.tix_option_get('fixed_font') |
|
70 top.ent.entry['font'] = font |
|
71 |
|
72 self.dlist_dir = copy.copy(os.curdir) |
|
73 # This should work setting the entry's textvariable |
|
74 top.ent.entry['textvariable'] = self.dlist_dir |
|
75 top.btn['command'] = lambda dir=top.dir, ent=top.ent, self=self: \ |
|
76 self.copy_name(dir,ent) |
|
77 |
|
78 # top.ent.entry.insert(0,'tix'+repr(self)) |
|
79 top.ent.entry.bind('<Return>', lambda self=self: self.okcmd () ) |
|
80 |
|
81 top.pack( expand='yes', fill='both', side=TOP) |
|
82 top.dir.pack( expand=1, fill=BOTH, padx=4, pady=4, side=LEFT) |
|
83 top.btn.pack( anchor='s', padx=4, pady=4, side=LEFT) |
|
84 top.ent.pack( expand=1, fill=X, anchor='s', padx=4, pady=4, side=LEFT) |
|
85 |
|
86 # Use a ButtonBox to hold the buttons. |
|
87 # |
|
88 box = Tix.ButtonBox (w, orientation='horizontal') |
|
89 box.add ('ok', text='Ok', underline=0, width=6, |
|
90 command = lambda self=self: self.okcmd () ) |
|
91 box.add ('cancel', text='Cancel', underline=0, width=6, |
|
92 command = lambda self=self: self.quitcmd () ) |
|
93 |
|
94 box.pack( anchor='s', fill='x', side=BOTTOM) |
|
95 |
|
96 def copy_name (self, dir, ent): |
|
97 # This should work as it is the entry's textvariable |
|
98 self.dlist_dir = dir.cget('value') |
|
99 # but it isn't so I'll do it manually |
|
100 ent.entry.delete(0,'end') |
|
101 ent.entry.insert(0, self.dlist_dir) |
|
102 |
|
103 def okcmd (self): |
|
104 # tixDemo:Status "You have selected the directory" + self.dlist_dir |
|
105 self.quitcmd() |
|
106 |
|
107 def quitcmd (self): |
|
108 self.exit = 0 |
|
109 |
|
110 def mainloop(self): |
|
111 while self.exit < 0: |
|
112 self.root.tk.dooneevent(TCL_ALL_EVENTS) |
|
113 |
|
114 def destroy (self): |
|
115 self.root.destroy() |
|
116 |
|
117 # This "if" statement makes it possible to run this script file inside or |
|
118 # outside of the main demo program "tixwidgets.py". |
|
119 # |
|
120 if __name__== '__main__' : |
|
121 import tkMessageBox, traceback |
|
122 |
|
123 try: |
|
124 root=Tix.Tk() |
|
125 RunSample(root) |
|
126 except: |
|
127 t, v, tb = sys.exc_info() |
|
128 text = "Error running the demo script:\n" |
|
129 for line in traceback.format_exception(t,v,tb): |
|
130 text = text + line + '\n' |
|
131 d = tkMessageBox.showerror ( 'Tix Demo Error', text) |