Home | History | Annotate | Download | only in samples
      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 
     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)
    132