1- #!/usr/local/bin/ python
2- #
1+ # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*-
2+ #
33# $Id$
44#
55# Tix Demostration Program
66#
77# This sample program is structured in such a way so that it can be
8- # executed from the Tix demo program "tixwidgets": it must have a
8+ # executed from the Tix demo program "tixwidgets.py ": it must have a
99# procedure called "RunSample". It should also have the "if" statment
1010# at the end of this file so that it can be run as a standalone
1111# program.
1717# This example program uses three Control widgets. One lets you select
1818# integer values; one lets you select floating point values and the last
1919# one lets you select a few names.
20- #
20+
2121import Tix
2222
23- def RunSample (w ):
24- global demo_maker , demo_thrust , demo_num_engines
25-
26- demo_maker = Tix .StringVar ()
27- demo_thrust = Tix .DoubleVar ()
28- demo_num_engines = Tix .IntVar ()
29- demo_maker .set ('P&W' )
30- demo_thrust .set (20000.0 )
31- demo_num_engines .set (2 )
32-
33- top = Tix .Frame (w , bd = 1 , relief = Tix .RAISED )
34-
35- # $w.top.a allows only integer values
36- #
37- # [Hint] The -options switch sets the options of the subwidgets.
38- # [Hint] We set the label.width subwidget option of the Controls to
39- # be 16 so that their labels appear to be aligned.
40- #
41- a = Tix .Control (top , label = 'Number of Engines: ' , integer = 1 ,
42- variable = demo_num_engines , min = 1 , max = 4 ,
43- options = 'entry.width 10 label.width 20 label.anchor e' )
44-
45- b = Tix .Control (top , label = 'Thrust: ' , integer = 0 ,
46- min = '10000.0' , max = '60000.0' , step = 500 ,
47- variable = demo_thrust ,
48- options = 'entry.width 10 label.width 20 label.anchor e' )
49-
50- c = Tix .Control (top , label = 'Engine Maker: ' , value = 'P&W' ,
51- variable = demo_maker ,
52- options = 'entry.width 10 label.width 20 label.anchor e' )
53-
54- # We can't define these in the init because the widget 'c' doesn't
55- # exist yet and we need to reference it
56- c ['incrcmd' ] = lambda w = c : adjust_maker (w , 1 )
57- c ['decrcmd' ] = lambda w = c : adjust_maker (w , - 1 )
58- c ['validatecmd' ] = lambda w = c : validate_maker (w )
59-
60- a .pack (side = Tix .TOP , anchor = Tix .W )
61- b .pack (side = Tix .TOP , anchor = Tix .W )
62- c .pack (side = Tix .TOP , anchor = Tix .W )
63-
64- box = Tix .ButtonBox (w , orientation = Tix .HORIZONTAL )
65- box .add ('ok' , text = 'Ok' , underline = 0 , width = 6 ,
66- command = lambda w = w : ok_command (w ))
67- box .add ('cancel' , text = 'Cancel' , underline = 0 , width = 6 ,
68- command = lambda w = w : w .destroy ())
69- box .pack (side = Tix .BOTTOM , fill = Tix .X )
70- top .pack (side = Tix .TOP , fill = Tix .BOTH , expand = 1 )
23+ TCL_ALL_EVENTS = 0
24+
25+ def RunSample (root ):
26+ control = DemoControl (root )
27+ control .mainloop ()
28+ control .destroy ()
29+
30+ class DemoControl :
31+ def __init__ (self , w ):
32+ self .root = w
33+ self .exit = - 1
34+
35+ global demo_maker , demo_thrust , demo_num_engines
36+
37+ demo_maker = Tix .StringVar ()
38+ demo_thrust = Tix .DoubleVar ()
39+ demo_num_engines = Tix .IntVar ()
40+ demo_maker .set ('P&W' )
41+ demo_thrust .set (20000.0 )
42+ demo_num_engines .set (2 )
43+
44+ top = Tix .Frame (w , bd = 1 , relief = Tix .RAISED )
45+
46+ # $w.top.a allows only integer values
47+ #
48+ # [Hint] The -options switch sets the options of the subwidgets.
49+ # [Hint] We set the label.width subwidget option of the Controls to
50+ # be 16 so that their labels appear to be aligned.
51+ #
52+ a = Tix .Control (top , label = 'Number of Engines: ' , integer = 1 ,
53+ variable = demo_num_engines , min = 1 , max = 4 ,
54+ options = 'entry.width 10 label.width 20 label.anchor e' )
55+
56+ b = Tix .Control (top , label = 'Thrust: ' , integer = 0 ,
57+ min = '10000.0' , max = '60000.0' , step = 500 ,
58+ variable = demo_thrust ,
59+ options = 'entry.width 10 label.width 20 label.anchor e' )
60+
61+ c = Tix .Control (top , label = 'Engine Maker: ' , value = 'P&W' ,
62+ variable = demo_maker ,
63+ options = 'entry.width 10 label.width 20 label.anchor e' )
64+
65+ # We can't define these in the init because the widget 'c' doesn't
66+ # exist yet and we need to reference it
67+ c ['incrcmd' ] = lambda w = c : adjust_maker (w , 1 )
68+ c ['decrcmd' ] = lambda w = c : adjust_maker (w , - 1 )
69+ c ['validatecmd' ] = lambda w = c : validate_maker (w )
70+
71+ a .pack (side = Tix .TOP , anchor = Tix .W )
72+ b .pack (side = Tix .TOP , anchor = Tix .W )
73+ c .pack (side = Tix .TOP , anchor = Tix .W )
74+
75+ box = Tix .ButtonBox (w , orientation = Tix .HORIZONTAL )
76+ box .add ('ok' , text = 'Ok' , underline = 0 , width = 6 ,
77+ command = self .okcmd )
78+ box .add ('cancel' , text = 'Cancel' , underline = 0 , width = 6 ,
79+ command = self .quitcmd )
80+ box .pack (side = Tix .BOTTOM , fill = Tix .X )
81+ top .pack (side = Tix .TOP , fill = Tix .BOTH , expand = 1 )
82+
83+ def okcmd (self ):
84+ # tixDemo:Status "Selected %d of %s engines each of thrust %d", (demo_num_engines.get(), demo_maker.get(), demo_thrust.get())
85+ self .quitcmd ()
86+
87+ def quitcmd (self ):
88+ self .exit = 0
89+
90+ def mainloop (self ):
91+ while self .exit < 0 :
92+ self .root .tk .dooneevent (TCL_ALL_EVENTS )
93+
94+ def destroy (self ):
95+ self .root .destroy ()
7196
7297maker_list = ['P&W' , 'GE' , 'Rolls Royce' ]
7398
@@ -92,11 +117,6 @@ def validate_maker(w):
92117 # Works here though. Why ? Beats me.
93118 return maker_list [i ]
94119
95- def ok_command (w ):
96- print "Selected" , demo_num_engines .get (), "of" , demo_maker .get (), " engines each of thrust" , demo_thrust .get ()
97- w .destroy ()
98-
99120if __name__ == '__main__' :
100121 root = Tix .Tk ()
101122 RunSample (root )
102- root .mainloop ()
0 commit comments