1# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- 2# 3# $Id$ 4# 5# Tix Demonstration 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 19import Tix, os, copy 20from Tkconstants import * 21 22TCL_ALL_EVENTS = 0 23 24def RunSample (root): 25 dirlist = DemoDirList(root) 26 dirlist.mainloop() 27 dirlist.destroy() 28 29class 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# 120if __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) 132