Commit | Line | Data |
---|---|---|
920dae64 AT |
1 | title = 'Pmw.Balloon demonstration' |
2 | ||
3 | # Import Pmw from this directory tree. | |
4 | import sys | |
5 | sys.path[:0] = ['../../..'] | |
6 | ||
7 | import Tkinter | |
8 | import Pmw | |
9 | ||
10 | class Demo: | |
11 | def __init__(self, parent): | |
12 | # Create the Balloon. | |
13 | self.balloon = Pmw.Balloon(parent) | |
14 | ||
15 | # Create some widgets and megawidgets with balloon help. | |
16 | frame = Tkinter.Frame(parent) | |
17 | frame.pack(padx = 10, pady = 5) | |
18 | field = Pmw.EntryField(frame, | |
19 | labelpos = 'nw', | |
20 | label_text = 'Command:') | |
21 | field.setentry('mycommand -name foo') | |
22 | field.pack(side = 'left', padx = 10) | |
23 | self.balloon.bind(field, 'Command to\nstart/stop', | |
24 | 'Enter the shell command to control') | |
25 | ||
26 | start = Tkinter.Button(frame, text='Start') | |
27 | start.pack(side='left', padx = 10) | |
28 | self.balloon.bind(start, 'Start the command') | |
29 | ||
30 | stop = Tkinter.Button(frame, text='Stop') | |
31 | stop.pack(side='left', padx = 10) | |
32 | self.balloon.bind(stop, 'Stop the command') | |
33 | ||
34 | self.suicide = Tkinter.Button(frame, text='Kill me soon!', | |
35 | command = self.killButton) | |
36 | self.suicide.pack(side='left', padx = 10) | |
37 | self.balloon.bind(self.suicide, 'Watch this button disappear!') | |
38 | ||
39 | scrolledCanvas = Pmw.ScrolledCanvas(parent, | |
40 | canvas_width = 300, | |
41 | canvas_height = 115, | |
42 | ) | |
43 | scrolledCanvas.pack() | |
44 | canvas = scrolledCanvas.component('canvas') | |
45 | self.canvas = canvas | |
46 | ||
47 | # Create some canvas items and individual help. | |
48 | item = canvas.create_arc(5, 5, 35, 35, fill = 'red', extent = 315) | |
49 | self.balloon.tagbind(canvas, item, 'This is help for\nan arc item') | |
50 | item = canvas.create_bitmap(20, 150, bitmap = 'question') | |
51 | self.balloon.tagbind(canvas, item, 'This is help for\na bitmap') | |
52 | item = canvas.create_line(50, 60, 70, 80, 85, 20, width = 5) | |
53 | self.balloon.tagbind(canvas, item, 'This is help for\na line item') | |
54 | item = canvas.create_text(10, 90, text = 'Canvas items with balloons', | |
55 | anchor = 'nw', font = field.cget('entry_font')) | |
56 | self.balloon.tagbind(canvas, item, 'This is help for\na text item') | |
57 | ||
58 | # Create two canvas items which have the same tag and which use | |
59 | # the same help. | |
60 | canvas.create_rectangle(100, 10, 170, 50, fill = 'aliceblue', | |
61 | tags = 'TAG1') | |
62 | self.bluecircle = canvas.create_oval(110, 30, 160, 80, fill = 'blue', | |
63 | tags = 'TAG1') | |
64 | self.balloon.tagbind(canvas, 'TAG1', | |
65 | 'This is help for the two blue items' + '\n' * 10 + | |
66 | 'It is very, very big.', | |
67 | 'This is help for the two blue items') | |
68 | item = canvas.create_text(180, 10, text = 'Delete', | |
69 | anchor = 'nw', font = field.cget('entry_font')) | |
70 | self.balloon.tagbind(canvas, item, | |
71 | 'After 2 seconds,\ndelete the blue circle') | |
72 | canvas.tag_bind(item, '<ButtonPress>', self._canvasButtonpress) | |
73 | scrolledCanvas.resizescrollregion() | |
74 | ||
75 | scrolledText = Pmw.ScrolledText(parent, | |
76 | text_width = 32, | |
77 | text_height = 4, | |
78 | text_wrap = 'none', | |
79 | ) | |
80 | scrolledText.pack(pady = 5) | |
81 | text = scrolledText.component('text') | |
82 | self.text = text | |
83 | ||
84 | text.insert('end', | |
85 | 'This is a text widget with ', '', | |
86 | ' balloon', 'TAG1', | |
87 | '\nhelp. Find the ', '', | |
88 | ' text ', 'TAG1', | |
89 | ' tagged with', '', | |
90 | ' help.', 'TAG2', | |
91 | '\n', '', | |
92 | 'Remove tag 1.', 'TAG3', | |
93 | '\nAnother line.\nAnd another', '', | |
94 | ) | |
95 | text.tag_configure('TAG1', borderwidth = 2, relief = 'sunken') | |
96 | text.tag_configure('TAG3', borderwidth = 2, relief = 'raised') | |
97 | ||
98 | self.balloon.tagbind(text, 'TAG1', | |
99 | 'There is one secret\nballoon help.\nCan you find it?') | |
100 | self.balloon.tagbind(text, 'TAG2', | |
101 | 'Well done!\nYou found it!') | |
102 | self.balloon.tagbind(text, 'TAG3', | |
103 | 'After 2 seconds\ndelete the tag') | |
104 | text.tag_bind('TAG3', '<ButtonPress>', self._textButtonpress) | |
105 | ||
106 | frame = Tkinter.Frame(parent) | |
107 | frame.pack(padx = 10) | |
108 | self.toggleBalloonVar = Tkinter.IntVar() | |
109 | self.toggleBalloonVar.set(1) | |
110 | toggle = Tkinter.Checkbutton(frame, | |
111 | variable = self.toggleBalloonVar, | |
112 | text = 'Balloon help', command = self.toggle) | |
113 | toggle.pack(side = 'left', padx = 10) | |
114 | self.balloon.bind(toggle, 'Toggle balloon help\non and off') | |
115 | ||
116 | self.toggleStatusVar = Tkinter.IntVar() | |
117 | self.toggleStatusVar.set(1) | |
118 | toggle = Tkinter.Checkbutton(frame, | |
119 | variable = self.toggleStatusVar, | |
120 | text = 'Status help', command = self.toggle) | |
121 | toggle.pack(side = 'left', padx = 10) | |
122 | self.balloon.bind(toggle, | |
123 | 'Toggle status help on and off, on and off' + '\n' * 10 + | |
124 | 'It is very, very big, too.', | |
125 | 'Toggle status help on and off') | |
126 | ||
127 | # Create and pack the MessageBar. | |
128 | messageBar = Pmw.MessageBar(parent, | |
129 | entry_width = 40, | |
130 | entry_relief='groove', | |
131 | labelpos = 'w', | |
132 | label_text = 'Status:') | |
133 | messageBar.pack(fill = 'x', expand = 1, padx = 10, pady = 5) | |
134 | ||
135 | # Configure the balloon to display its status messages in the | |
136 | # message bar. | |
137 | self.balloon.configure(statuscommand = messageBar.helpmessage) | |
138 | ||
139 | def toggle(self): | |
140 | if self.toggleBalloonVar.get(): | |
141 | if self.toggleStatusVar.get(): | |
142 | self.balloon.configure(state = 'both') | |
143 | else: | |
144 | self.balloon.configure(state = 'balloon') | |
145 | else: | |
146 | if self.toggleStatusVar.get(): | |
147 | self.balloon.configure(state = 'status') | |
148 | else: | |
149 | self.balloon.configure(state = 'none') | |
150 | ||
151 | def killButton(self): | |
152 | # Test for old bug when destroying widgets 1) while the | |
153 | # balloon was up and 2) during the initwait period. | |
154 | print 'Destroying button in 2 seconds' | |
155 | self.suicide.after(2000, self.suicide.destroy) | |
156 | ||
157 | def _canvasButtonpress(self, event): | |
158 | print 'Destroying blue circle in 2 seconds' | |
159 | self.canvas.after(2000, self.deleteBlueCircle) | |
160 | ||
161 | def deleteBlueCircle(self): | |
162 | self.balloon.tagunbind(self.canvas, self.bluecircle) | |
163 | self.canvas.delete(self.bluecircle) | |
164 | ||
165 | def _textButtonpress(self, event): | |
166 | print 'Deleting the text tag in 2 seconds' | |
167 | self.text.after(2000, self.deleteTextTag) | |
168 | ||
169 | def deleteTextTag(self): | |
170 | self.balloon.tagunbind(self.text, 'TAG1') | |
171 | self.text.tag_delete('TAG1') | |
172 | ||
173 | ||
174 | ###################################################################### | |
175 | ||
176 | # Create demo in root window for testing. | |
177 | if __name__ == '__main__': | |
178 | root = Tkinter.Tk() | |
179 | Pmw.initialise(root, 12, fontScheme = 'default') | |
180 | root.title(title) | |
181 | ||
182 | exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy) | |
183 | exitButton.pack(side = 'bottom') | |
184 | widget = Demo(root) | |
185 | root.mainloop() |