]> granicus.if.org Git - python/commitdiff
Patch #485959: Various changes to Tix demos.
authorMartin v. Löwis <martin@v.loewis.de>
Sun, 17 Mar 2002 18:19:13 +0000 (18:19 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Sun, 17 Mar 2002 18:19:13 +0000 (18:19 +0000)
14 files changed:
Demo/tix/samples/Balloon.py
Demo/tix/samples/BtnBox.py
Demo/tix/samples/CmpImg.py
Demo/tix/samples/ComboBox.py
Demo/tix/samples/Control.py
Demo/tix/samples/DirList.py
Demo/tix/samples/DirTree.py
Demo/tix/samples/NoteBook.py
Demo/tix/samples/OptMenu.py
Demo/tix/samples/PopMenu.py
Demo/tix/samples/SHList1.py
Demo/tix/samples/SHList2.py
Demo/tix/samples/Tree.py
Demo/tix/tixwidgets.py

index df90660a456eb367cc4f4b146c9ea5173bc48924..825ae6aa7f26318e1090aea08ce60acb8cbd84c3 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
-# 
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
 
 import Tix
 
-def RunSample(w):
-    status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
-    status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
+TCL_ALL_EVENTS         = 0
+
+def RunSample (root):
+    balloon = DemoBalloon(root)
+    balloon.mainloop()
+    balloon.destroy()
+
+class DemoBalloon:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
+
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
+        status = Tix.Label(w, width=40, relief=Tix.SUNKEN, bd=1)
+        status.pack(side=Tix.BOTTOM, fill=Tix.Y, padx=2, pady=1)
 
-    # Create two mysterious widgets that need balloon help
-    button1 = Tix.Button(w, text='Something Unexpected',
-                        command=lambda w=w: w.destroy())
-    button2 = Tix.Button(w, text='Something Else Unexpected')
-    button2['command'] = lambda w=button2: w.destroy()
-    button1.pack(side=Tix.TOP, expand=1)
-    button2.pack(side=Tix.TOP, expand=1)
+        # Create two mysterious widgets that need balloon help
+        button1 = Tix.Button(w, text='Something Unexpected',
+                             command=self.quitcmd)
+        button2 = Tix.Button(w, text='Something Else Unexpected')
+        button2['command'] = lambda w=button2: w.destroy()
+        button1.pack(side=Tix.TOP, expand=1)
+        button2.pack(side=Tix.TOP, expand=1)
 
-    # Create the balloon widget and associate it with the widgets that we want
-    # to provide tips for:
-    b = Tix.Balloon(w, statusbar=status)
+        # Create the balloon widget and associate it with the widgets that we want
+        # to provide tips for:
+        b = Tix.Balloon(w, statusbar=status)
 
-    b.bind_widget(button1, balloonmsg='Close Window',
-                 statusmsg='Press this button to close this window')
-    b.bind_widget(button2, balloonmsg='Self-destruct button',
-                 statusmsg='Press this button and it will destroy itself')
+        b.bind_widget(button1, balloonmsg='Close Window',
+                      statusmsg='Press this button to close this window')
+        b.bind_widget(button2, balloonmsg='Self-destruct button',
+                      statusmsg='Press this button and it will destroy itself')
+
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        foundEvent = 1
+        while self.exit < 0 and foundEvent > 0:
+            foundEvent = self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 if __name__ == '__main__':
     root = Tix.Tk()
-
     RunSample(root)
-    root.mainloop()
index f21cc15d62673c827d7366f0b2d4e81192aabc6b..57d02dfefc0275c365e727baf1fe83cc68103144 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
index 4e03bc18677f2a676a55618d0168ef51a342f1be..4e08df799b30895a2b076018a8510bb7e5c4fba0 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
index 84b1b305da9022abbf8ee9b9578bbe9c5b11d8db..afecea4c7decf5f25ef54d5b4314bdc3dd4445a6 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -85,13 +85,15 @@ def RunSample(w):
     top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
 
 def select_month(event=None):
-    print "Month =", demo_month.get()
+    # tixDemo:Status "Month = %s" % demo_month.get()
+    pass
 
 def select_year(event=None):
-    print "Year =", demo_year.get()
+    # tixDemo:Status "Year = %s" % demo_year.get()
+    pass
 
 def ok_command(w):
-    print "Month =", demo_month.get(), ", Year=", demo_year.get()
+    # tixDemo:Status "Month = %s, Year= %s" % (demo_month.get(), demo_year.get())
     w.destroy()
 
 if __name__ == '__main__':
index 4b31ced5da86bbdbb41fd221250c33c739848c7e..e85ee845dfa06a9d90d72a0240e92f655f38735d 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
-# 
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
 # This example program uses three Control widgets. One lets you select
 # integer values; one lets you select floating point values and the last
 # one lets you select a few names.
-#
+
 import Tix
 
-def RunSample(w):
-    global demo_maker, demo_thrust, demo_num_engines
-
-    demo_maker = Tix.StringVar()
-    demo_thrust = Tix.DoubleVar()
-    demo_num_engines = Tix.IntVar()
-    demo_maker.set('P&W')
-    demo_thrust.set(20000.0)
-    demo_num_engines.set(2)
-
-    top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
-
-    # $w.top.a allows only integer values
-    #
-    # [Hint] The -options switch sets the options of the subwidgets.
-    # [Hint] We set the label.width subwidget option of the Controls to 
-    #        be 16 so that their labels appear to be aligned.
-    #
-    a = Tix.Control(top, label='Number of Engines: ', integer=1,
-                   variable=demo_num_engines, min=1, max=4,
-                   options='entry.width 10 label.width 20 label.anchor e')
-    
-    b = Tix.Control(top, label='Thrust: ', integer=0,
-                   min='10000.0', max='60000.0', step=500,
-                   variable=demo_thrust,
-                   options='entry.width 10 label.width 20 label.anchor e')
-
-    c = Tix.Control(top, label='Engine Maker: ', value='P&W',
-                   variable=demo_maker,
-                   options='entry.width 10 label.width 20 label.anchor e')
-
-    # We can't define these in the init because the widget 'c' doesn't
-    # exist yet and we need to reference it
-    c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
-    c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
-    c['validatecmd'] = lambda w=c: validate_maker(w)
-
-    a.pack(side=Tix.TOP, anchor=Tix.W)
-    b.pack(side=Tix.TOP, anchor=Tix.W)
-    c.pack(side=Tix.TOP, anchor=Tix.W)
-
-    box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
-    box.add('ok', text='Ok', underline=0, width=6,
-           command=lambda w=w: ok_command(w))
-    box.add('cancel', text='Cancel', underline=0, width=6,
-           command=lambda w=w: w.destroy())
-    box.pack(side=Tix.BOTTOM, fill=Tix.X)
-    top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+TCL_ALL_EVENTS         = 0
+
+def RunSample (root):
+    control = DemoControl(root)
+    control.mainloop()
+    control.destroy()
+
+class DemoControl:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
+
+        global demo_maker, demo_thrust, demo_num_engines
+
+        demo_maker = Tix.StringVar()
+        demo_thrust = Tix.DoubleVar()
+        demo_num_engines = Tix.IntVar()
+        demo_maker.set('P&W')
+        demo_thrust.set(20000.0)
+        demo_num_engines.set(2)
+
+        top = Tix.Frame(w, bd=1, relief=Tix.RAISED)
+
+        # $w.top.a allows only integer values
+        #
+        # [Hint] The -options switch sets the options of the subwidgets.
+        # [Hint] We set the label.width subwidget option of the Controls to 
+        #        be 16 so that their labels appear to be aligned.
+        #
+        a = Tix.Control(top, label='Number of Engines: ', integer=1,
+                        variable=demo_num_engines, min=1, max=4,
+                        options='entry.width 10 label.width 20 label.anchor e')
+
+        b = Tix.Control(top, label='Thrust: ', integer=0,
+                        min='10000.0', max='60000.0', step=500,
+                        variable=demo_thrust,
+                        options='entry.width 10 label.width 20 label.anchor e')
+
+        c = Tix.Control(top, label='Engine Maker: ', value='P&W',
+                        variable=demo_maker,
+                        options='entry.width 10 label.width 20 label.anchor e')
+
+        # We can't define these in the init because the widget 'c' doesn't
+        # exist yet and we need to reference it
+        c['incrcmd'] = lambda w=c: adjust_maker(w, 1)
+        c['decrcmd'] = lambda w=c: adjust_maker(w, -1)
+        c['validatecmd'] = lambda w=c: validate_maker(w)
+
+        a.pack(side=Tix.TOP, anchor=Tix.W)
+        b.pack(side=Tix.TOP, anchor=Tix.W)
+        c.pack(side=Tix.TOP, anchor=Tix.W)
+
+        box = Tix.ButtonBox(w, orientation=Tix.HORIZONTAL)
+        box.add('ok', text='Ok', underline=0, width=6,
+                command=self.okcmd)
+        box.add('cancel', text='Cancel', underline=0, width=6,
+                command=self.quitcmd)
+        box.pack(side=Tix.BOTTOM, fill=Tix.X)
+        top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
+
+    def okcmd (self):
+        # tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
+        self.quitcmd()
+        
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 maker_list = ['P&W', 'GE', 'Rolls Royce']
 
@@ -92,11 +117,6 @@ def validate_maker(w):
     # Works here though. Why ? Beats me.
     return maker_list[i]
 
-def ok_command(w):
-    print "Selected", demo_num_engines.get(), "of", demo_maker.get(), " engines each of thrust", demo_thrust.get()
-    w.destroy()
-
 if __name__ == '__main__':
     root = Tix.Tk()
     RunSample(root)
-    root.mainloop()
index 3064768b41e614c55804cb7f1813d991ccc99e85..b2aad336fcf1ae3c36760e4472b637fadbec0364 100755 (executable)
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py":  it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
 import Tix, os, copy
 from Tkconstants import *
 
-TCL_DONT_WAIT          = 1<<1
-TCL_WINDOW_EVENTS      = 1<<2
-TCL_FILE_EVENTS                = 1<<3
-TCL_TIMER_EVENTS       = 1<<4
-TCL_IDLE_EVENTS                = 1<<5
 TCL_ALL_EVENTS         = 0
 
 def RunSample (root):
-    global dirlist
     dirlist = DemoDirList(root)
     dirlist.mainloop()
     dirlist.destroy()
@@ -38,7 +32,7 @@ class DemoDirList:
         self.exit = -1
         
         z = w.winfo_toplevel()
-        z.wm_title('Tix.DirList Widget Demo')
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
         
         # Create the tixDirList and the tixLabelEntry widgets on the on the top
         # of the dialog box
@@ -98,7 +92,6 @@ class DemoDirList:
                      command = lambda self=self: self.quitcmd () )
 
         box.pack( anchor='s', fill='x', side=BOTTOM)
-        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
 
     def copy_name (self, dir, ent):
         # This should work as it is the entry's textvariable
@@ -108,24 +101,21 @@ class DemoDirList:
         ent.entry.insert(0, self.dlist_dir)
 
     def okcmd (self):
-        # tixDemo:Status "You have selected the directory" + $self.dlist_dir
-
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
         self.quitcmd()
 
     def quitcmd (self):
-        # self.root.destroy()
         self.exit = 0
 
     def mainloop(self):
         while self.exit < 0:
             self.root.tk.dooneevent(TCL_ALL_EVENTS)
-        # self.root.tk.dooneevent(TCL_DONT_WAIT)
 
     def destroy (self):
         self.root.destroy()
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     import tkMessageBox, traceback
index 7bf813c321e05968d60f788aa92d95164f039f88..d007a2ba725ac985f97d0a270e8a5f04d33324f6 100755 (executable)
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py":  it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
 import Tix, os, copy
 from Tkconstants import *
 
-def RunSample (w):
-    DemoDirTree(w)
+TCL_ALL_EVENTS         = 0
+
+def RunSample (root):
+    dirtree = DemoDirTree(root)
+    dirtree.mainloop()
+    dirtree.destroy()
 
 class DemoDirTree:
     def __init__(self, w):
         self.root = w
+        self.exit = -1
         
         z = w.winfo_toplevel()
-        z.wm_title('Tix.DirTree Widget Demo')
-        
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+
         # Create the tixDirTree and the tixLabelEntry widgets on the on the top
         # of the dialog box
 
@@ -90,19 +95,24 @@ class DemoDirTree:
         ent.entry.insert(0, self.dlist_dir)
 
     def okcmd (self):
-        # tixDemo:Status "You have selected the directory" + $self.dlist_dir
-
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
         self.quitcmd()
 
     def quitcmd (self):
+        # tixDemo:Status "You have selected the directory" + self.dlist_dir
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
         self.root.destroy()
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
 
index 993dcc6c31a3c0e1659d9c34bb41e0e115315509..abf3bfd95425b472221cd2f09e0c0d38b00f90e4 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
index 2d05938372a7bf88231dc217325a371205d63fb7..ecb0c86abcfa5052c1650239f409f92a7b267967 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
@@ -59,7 +59,7 @@ def RunSample(w):
     top.pack(side=Tix.TOP, fill=Tix.BOTH, expand=1)
 
 def ok_command(w):
-    print "Convert file from", demo_opt_from.get(), " to", demo_opt_to.get()
+    # tixDemo:Status "Convert file from %s to %s" % ( demo_opt_from.get(), demo_opt_to.get())
     w.destroy()
 
 if __name__ == '__main__':
index c2301cf78cd1c4a7b44ec3969188c522a848672b..602eafdc5c9db398d6fad4652e59e880e9e9ae8b 100755 (executable)
@@ -1,10 +1,11 @@
-# Tix Demostration Program
-# 
-# $Id$
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
+#
+#      $Id$
 #
+# Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "widget": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
index f4294ee68483178acfe2b93232a0278b2af1965f..0114dc8a539c93c4e4f0a774957fc53679ec5b31 100755 (executable)
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
 
 import Tix
 
-def RunSample (w) :
-
-    # We create the frame and the ScrolledHList widget
-    # at the top of the dialog box
-    #
-    top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
-
-    # Put a simple hierachy into the HList (two levels). Use colors and
-    # separator widgets (frames) to make the list look fancy
-    #
-    top.a  = Tix.ScrolledHList(top)
-    top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
-
-
-    # This is our little relational database
-    #
-    bosses = [
-       ('jeff',  'Jeff Waxman'),
-       ('john',  'John Lee'),
-       ('peter', 'Peter Kenson')
-    ]
-
-    employees = [
-       ('alex',  'john',  'Alex Kellman'),
-       ('alan',  'john',  'Alan Adams'),
-       ('andy',  'peter', 'Andreas Crawford'),
-       ('doug',  'jeff',  'Douglas Bloom'),
-       ('jon',   'peter', 'Jon Baraki'),
-       ('chris', 'jeff',  'Chris Geoffrey'),
-       ('chuck', 'jeff',  'Chuck McLean')
-    ]
-
-    hlist=top.a.hlist
-
-    # Let configure the appearance of the HList subwidget 
-    #
-    hlist.config( separator='.', width=25, drawbranch=0, indent=10)
-
-    count=0
-    for boss,name in bosses :
-       if count :
-           f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
-               bd=2, relief=Tix.SUNKEN )
-
-           hlist.add_child( itemtype=Tix.WINDOW, 
-               window=f, state=Tix.DISABLED )
-       
-       hlist.add(boss, itemtype=Tix.TEXT, text=name)
-       count = count+1
-    
-
-    for person,boss,name in employees :
-       # '.' is the separator character we chose above
-       #
-       key= boss    + '.'     + person
-       #    ^^^^                ^^^^^^
-       #    parent entryPath /  child's name
-
-       hlist.add( key, text=name )
-
-       # [Hint] Make sure the keys (e.g. 'boss.person') you choose
-       #        are unique names. If you cannot be sure of this (because of
-       #        the structure of your database, e.g.) you can use the
-       #        "add_child" command instead:
-       #
-       #  hlist.addchild( boss,  text=name)
-       #                  ^^^^
-       #                  parent entryPath 
-
+TCL_ALL_EVENTS         = 0
 
-    # Use a ButtonBox to hold the buttons.
-    #
-    box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
-    box.add( 'ok',  text='Ok', underline=0,  width=6,
-       command = lambda w=w:  w.quit() )
-
-    box.add( 'cancel', text='Cancel', underline=0, width=6,
-       command = lambda w=w:  w.quit() )
-
-    box.pack( side=Tix.BOTTOM, fill=Tix.X)
-    top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+def RunSample (root):
+    shlist = DemoSHList(root)
+    shlist.mainloop()
+    shlist.destroy()
+    
+class DemoSHList:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
+
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+        
+        # We create the frame and the ScrolledHList widget
+        # at the top of the dialog box
+        #
+        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
+
+        # Put a simple hierachy into the HList (two levels). Use colors and
+        # separator widgets (frames) to make the list look fancy
+        #
+        top.a = Tix.ScrolledHList(top)
+        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
+
+        # This is our little relational database
+        #
+        bosses = [
+            ('jeff',  'Jeff Waxman'),
+            ('john',  'John Lee'),
+            ('peter', 'Peter Kenson')
+        ]
+
+        employees = [
+            ('alex',  'john',  'Alex Kellman'),
+            ('alan',  'john',  'Alan Adams'),
+            ('andy',  'peter', 'Andreas Crawford'),
+            ('doug',  'jeff',  'Douglas Bloom'),
+            ('jon',   'peter', 'Jon Baraki'),
+            ('chris', 'jeff',  'Chris Geoffrey'),
+            ('chuck', 'jeff',  'Chuck McLean')
+        ]
+
+        hlist=top.a.hlist
+
+        # Let configure the appearance of the HList subwidget 
+        #
+        hlist.config( separator='.', width=25, drawbranch=0, indent=10)
+
+        count=0
+        for boss,name in bosses :
+            if count :
+                f=Tix.Frame(hlist, name='sep%d' % count, height=2, width=150,
+                    bd=2, relief=Tix.SUNKEN )
+
+                hlist.add_child( itemtype=Tix.WINDOW, 
+                    window=f, state=Tix.DISABLED )
+
+            hlist.add(boss, itemtype=Tix.TEXT, text=name)
+            count = count+1
+
+
+        for person,boss,name in employees :
+            # '.' is the separator character we chose above
+            #
+            key= boss    + '.'     + person
+            #    ^^^^                ^^^^^^
+            #    parent entryPath /  child's name
+
+            hlist.add( key, text=name )
+
+            # [Hint] Make sure the keys (e.g. 'boss.person') you choose
+            #   are unique names. If you cannot be sure of this (because of
+            #   the structure of your database, e.g.) you can use the
+            #   "add_child" command instead:
+            #
+            #  hlist.addchild( boss,  text=name)
+            #                  ^^^^
+            #                  parent entryPath 
+
+
+        # Use a ButtonBox to hold the buttons.
+        #
+        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+        box.add( 'ok',  text='Ok', underline=0,  width=6,
+            command = self.okcmd)
+
+        box.add( 'cancel', text='Cancel', underline=0, width=6,
+            command = self.quitcmd)
+
+        box.pack( side=Tix.BOTTOM, fill=Tix.X)
+        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+
+    def okcmd (self):
+        self.quitcmd()
+
+    def quitcmd (self):
+        self.exit = 0
+
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
+
+    def destroy (self):
+        self.root.destroy()
 
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
+
index db245112b7b65760d0ee68c54833da3d9a3f299f..e82d1e586a3c6cde1f8ee75c31462ec90d0bc316 100755 (executable)
@@ -5,7 +5,7 @@
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the PyTix demo program "tixwidget": it must have a
+# executed from the Tix demo program "tixwidget": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program using tixwish.
 
 import Tix
 
-def RunSample (w) :
+TCL_ALL_EVENTS         = 0
 
-    # We create the frame and the ScrolledHList widget
-    # at the top of the dialog box
-    #
-    top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
-
-    # Put a simple hierachy into the HList (two levels). Use colors and
-    # separator widgets (frames) to make the list look fancy
-    #
-    top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
+def RunSample (root):
+    shlist = DemoSHList(root)
+    shlist.mainloop()
+    shlist.destroy()
+    
+class DemoSHList:
+    def __init__(self, w):
+        self.root = w
+        self.exit = -1
+
+        z = w.winfo_toplevel()
+        z.wm_protocol("WM_DELETE_WINDOW", lambda self=self: self.quitcmd())
+        
+        # We create the frame and the ScrolledHList widget
+        # at the top of the dialog box
+        #
+        top = Tix.Frame( w, relief=Tix.RAISED, bd=1)
+
+        # Put a simple hierachy into the HList (two levels). Use colors and
+        # separator widgets (frames) to make the list look fancy
+        #
+        top.a = Tix.ScrolledHList(top, options='hlist.columns 3 hlist.header 1' )
+        top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
+
+        hlist=top.a.hlist
+
+        # Create the title for the HList widget
+        #      >> Notice that we have set the hlist.header subwidget option to true
+        #      so that the header is displayed
+        #
+
+        boldfont=hlist.tk.call('tix','option','get','bold_font')
+
+        # First some styles for the headers
+        style={}
+        style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist,
+            anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
+
+        hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
+            style=style['header'])
+        hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
+            style=style['header'])
 
-    top.a.pack( expand=1, fill=Tix.BOTH, padx=10, pady=10, side=Tix.TOP)
+        # Notice that we use 3 columns in the hlist widget. This way when the user
+        # expands the windows wide, the right side of the header doesn't look
+        # chopped off. The following line ensures that the 3 column header is
+        # not shown unless the hlist window is wider than its contents.
+        #
+        hlist.column_width(2,0)
 
-    hlist=top.a.hlist
+        # This is our little relational database
+        #
+        boss = ('doe', 'John Doe',     'Director')
 
-    # Create the title for the HList widget
-    #  >> Notice that we have set the hlist.header subwidget option to true
-    #      so that the header is displayed
-    #
+        managers = [
+            ('jeff',  'Jeff Waxman',   'Manager'),
+            ('john',  'John Lee',              'Manager'),
+            ('peter', 'Peter Kenson',  'Manager')
+        ]
 
-    boldfont=hlist.tk.call('tix','option','get','bold_font')
+        employees = [
+            ('alex',  'john',  'Alex Kellman',         'Clerk'),
+            ('alan',  'john',       'Alan Adams',              'Clerk'),
+            ('andy',  'peter',      'Andreas Crawford',        'Salesman'),
+            ('doug',  'jeff',       'Douglas Bloom',   'Clerk'),
+            ('jon',   'peter',      'Jon Baraki',              'Salesman'),
+            ('chris', 'jeff',       'Chris Geoffrey',  'Clerk'),
+            ('chuck', 'jeff',       'Chuck McLean',            'Cleaner')
+        ]
 
-    # First some styles for the headers
-    style={}
-    style['header'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top,
-       anchor=Tix.CENTER, padx=8, pady=2, font = boldfont )
+        style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
 
-    hlist.header_create(0, itemtype=Tix.TEXT, text='Name',
-       style=style['header'])
-    hlist.header_create(1, itemtype=Tix.TEXT, text='Position',
-       style=style['header'])
+        style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
 
-    # Notice that we use 3 columns in the hlist widget. This way when the user
-    # expands the windows wide, the right side of the header doesn't look
-    # chopped off. The following line ensures that the 3 column header is
-    # not shown unless the hlist window is wider than its contents.
-    #
-    hlist.column_width(2,0)
+        style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=hlist)
 
-    # This is our little relational database
-    #
-    boss = ('doe', 'John Doe', 'Director')
+        style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8, refwindow=hlist)
 
-    managers = [
-       ('jeff',  'Jeff Waxman',        'Manager'),
-       ('john',  'John Lee',           'Manager'),
-       ('peter', 'Peter Kenson',       'Manager')
-    ]
+        # Let configure the appearance of the HList subwidget 
+        #
+        hlist.config(separator='.', width=25, drawbranch=0, indent=10)
+        hlist.column_width(0, chars=20)
 
-    employees = [
-       ('alex',  'john',       'Alex Kellman',         'Clerk'),
-       ('alan',  'john',       'Alan Adams',           'Clerk'),
-       ('andy',  'peter',      'Andreas Crawford',     'Salesman'),
-       ('doug',  'jeff',       'Douglas Bloom',        'Clerk'),
-       ('jon',   'peter',      'Jon Baraki',           'Salesman'),
-       ('chris', 'jeff',       'Chris Geoffrey',       'Clerk'),
-       ('chuck', 'jeff',       'Chuck McLean',         'Cleaner')
-    ]
+        # Create the boss
+        #
+        hlist.add ('.',           itemtype=Tix.TEXT, text=boss[1],
+            style=style['mgr_name'])
+        hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
+            style=style['mgr_posn'])
 
-    style['mgr_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top)
+        # Create the managers
+        #
 
-    style['mgr_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8,  refwindow=top)
+        for key,name,posn in managers :
+            e= '.'+ key
+            hlist.add(e, itemtype=Tix.TEXT, text=name,
+                style=style['mgr_name'])
+            hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
+                style=style['mgr_posn'])
 
-    style['empl_name'] = Tix.DisplayStyle(Tix.TEXT, refwindow=top)
 
-    style['empl_posn'] = Tix.DisplayStyle(Tix.TEXT, padx=8,  refwindow=top)
+        for key,mgr,name,posn in employees :
+            # "." is the separator character we chose above
 
-    # Let configure the appearance of the HList subwidget 
-    #
-    hlist.config(separator='.', width=25, drawbranch=0, indent=10)
-    hlist.column_width(0, chars=20)
+            entrypath = '.' + mgr        + '.' + key 
 
-    # Create the boss
-    #
-    hlist.add ('.',           itemtype=Tix.TEXT, text=boss[1],
-       style=style['mgr_name'])
-    hlist.item_create('.', 1, itemtype=Tix.TEXT, text=boss[2],
-       style=style['mgr_posn'])
+            #           ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
+            #      parent entryPath / child's name
 
-    # Create the managers
-    #
+            hlist.add(entrypath, text=name, style=style['empl_name'])
+            hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
+                text = posn, style = style['empl_posn'] )
 
-    for key,name,posn in managers :
-       e= '.'+ key
-       hlist.add(e, itemtype=Tix.TEXT, text=name,
-           style=style['mgr_name'])
-       hlist.item_create(e, 1, itemtype=Tix.TEXT, text=posn,
-           style=style['mgr_posn'])
 
+        # Use a ButtonBox to hold the buttons.
+        #
+        box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
+        box.add( 'ok',  text='Ok', underline=0,  width=6,
+            command = self.okcmd )
 
-    for key,mgr,name,posn in employees :
-       # "." is the separator character we chose above
+        box.add( 'cancel', text='Cancel', underline=0, width=6,
+            command = self.quitcmd )
 
-       entrypath = '.' + mgr        + '.' + key 
+        box.pack( side=Tix.BOTTOM, fill=Tix.X)
+        top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
 
-       #           ^^^^^^^^^^^^^^^  ^^^^^^^^^^^^^^^
-       #           parent entryPath / child's name
+    def okcmd (self):
+        self.quitcmd()
 
-       hlist.add(entrypath, text=name, style=style['empl_name'])
-       hlist.item_create(entrypath, 1, itemtype=Tix.TEXT,
-           text = posn, style = style['empl_posn'] )
-    
+    def quitcmd (self):
+        self.exit = 0
 
-    # Use a ButtonBox to hold the buttons.
-    #
-    box= Tix.ButtonBox(top, orientation=Tix.HORIZONTAL )
-    box.add( 'ok',  text='Ok', underline=0,  width=6,
-       command = lambda w=w: w.quit() )
+    def mainloop(self):
+        while self.exit < 0:
+            self.root.tk.dooneevent(TCL_ALL_EVENTS)
 
-    box.add( 'cancel', text='Cancel', underline=0, width=6,
-       command = lambda w=w: w.quit() )
-
-    box.pack( side=Tix.BOTTOM, fill=Tix.X)
-    top.pack( side=Tix.TOP,    fill=Tix.BOTH, expand=1 )
+    def destroy (self):
+        self.root.destroy()
 
 
 # This "if" statement makes it possible to run this script file inside or
-# outside of the main demo program "widget".
+# outside of the main demo program "tixwidgets.py".
 #
 if __name__== '__main__' :
     root=Tix.Tk()
     RunSample(root)
-    root.mainloop()
-    root.destroy()
+
index b0520fbba51fc6bb1e6375df5850fb47ae8bd989..2fdd7c79c5e4edae3e6bb8073775d9fa2655b153 100755 (executable)
@@ -1,11 +1,11 @@
-#!/usr/local/bin/python
+# -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
 # 
 # $Id$
 #
 # Tix Demostration Program
 #
 # This sample program is structured in such a way so that it can be
-# executed from the Tix demo program "tixwidgets": it must have a
+# executed from the Tix demo program "tixwidgets.py": it must have a
 # procedure called "RunSample". It should also have the "if" statment
 # at the end of this file so that it can be run as a standalone
 # program.
index 6e570d783fead0840b9bd9790cc6084005ea0942..f0cf4d9a6e85754df65a693fccc4db48fee4925e 100644 (file)
@@ -154,7 +154,8 @@ class Demo:
                     text += line + '\n'
                 try: tkMessageBox.showerror ('Error', text)
                 except: pass
-                tkinspect_quit (1)
+                self.exit = 1
+                raise SystemExit, 1
 
     def destroy (self):
         self.root.destroy()
@@ -420,9 +421,13 @@ def MkFileEnt(w):
     ent.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)
 
 def MkFileBox(w):
+    """The FileSelectBox is a Motif-style box with various enhancements.
+    For example, you can adjust the size of the two listboxes
+    and your past selections are recorded.
+    """
     msg = Tix.Message(w, 
                      relief=Tix.FLAT, width=240, anchor=Tix.N,
-                     text='The TixFileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
+                     text='The Tix FileSelectBox is a Motif-style box with various enhancements. For example, you can adjust the size of the two listboxes and your past selections are recorded.')
     box = Tix.FileSelectBox(w)
     msg.pack(side=Tix.TOP, expand=1, fill=Tix.BOTH, padx=3, pady=3)
     box.pack(side=Tix.TOP, fill=Tix.X, padx=3, pady=3)