|
1 # -*-mode: python; fill-column: 75; tab-width: 8; coding: iso-latin-1-unix -*- |
|
2 # |
|
3 # $Id: Control.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. |
|
12 |
|
13 # This file demonstrates the use of the tixControl widget -- it is an |
|
14 # entry widget with up/down arrow buttons. You can use the arrow buttons |
|
15 # to adjust the value inside the entry widget. |
|
16 # |
|
17 # This example program uses three Control widgets. One lets you select |
|
18 # integer values; one lets you select floating point values and the last |
|
19 # one lets you select a few names. |
|
20 |
|
21 import Tix |
|
22 |
|
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() |
|
96 |
|
97 maker_list = ['P&W', 'GE', 'Rolls Royce'] |
|
98 |
|
99 def adjust_maker(w, inc): |
|
100 i = maker_list.index(demo_maker.get()) |
|
101 i = i + inc |
|
102 if i >= len(maker_list): |
|
103 i = 0 |
|
104 elif i < 0: |
|
105 i = len(maker_list) - 1 |
|
106 |
|
107 # In Tcl/Tix we should return the string maker_list[i]. We can't |
|
108 # do that in Tkinter so we set the global variable. (This works). |
|
109 demo_maker.set(maker_list[i]) |
|
110 |
|
111 def validate_maker(w): |
|
112 try: |
|
113 i = maker_list.index(demo_maker.get()) |
|
114 except ValueError: |
|
115 # Works here though. Why ? Beats me. |
|
116 return maker_list[0] |
|
117 # Works here though. Why ? Beats me. |
|
118 return maker_list[i] |
|
119 |
|
120 if __name__ == '__main__': |
|
121 root = Tix.Tk() |
|
122 RunSample(root) |