#Pmw copyright
#Copyright 1997-1999 Telstra Corporation Limited, Australia #Copyright 2000-2002 Really Good Software Pty Ltd, Australia
#Permission is hereby granted, free of charge, to any person obtaining a copy #of this software and associated documentation files (the "Software"), to deal #in the Software without restriction, including without limitation the rights #to use, copy, modify, merge, publish, distribute, sublicense, and/or sell #copies of the Software, and to permit persons to whom the Software is furnished #to do so, subject to the following conditions:
#The above copyright notice and this permission notice shall be included in all #copies or substantial portions of the Software.
#THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, #INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A #PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT #HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION #OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE #SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
title = 'Pmw.Balloon demonstration'
# Import Pmw from this directory tree. import sys sys.path[:0] = ['../../..']
import Tkinter import Pmw
class Demo: def __init__(self, parent): # Create the Balloon. self.balloon = Pmw.Balloon(parent)
# Create some widgets and megawidgets with balloon help. frame = Tkinter.Frame(parent) frame.pack(padx = 10, pady = 5) field = Pmw.EntryField(frame, labelpos = 'nw', label_text = 'Command:') field.setentry('mycommand -name foo') field.pack(side = 'left', padx = 10) self.balloon.bind(field, 'Command tonstart/stop', 'Enter the shell command to control')
start = Tkinter.Button(frame, text='Start') start.pack(side='left', padx = 10) self.balloon.bind(start, 'Start the command')
stop = Tkinter.Button(frame, text='Stop') stop.pack(side='left', padx = 10) self.balloon.bind(stop, 'Stop the command')
self.suicide = Tkinter.Button(frame, text='Kill me soon!', command = self.killButton) self.suicide.pack(side='left', padx = 10) self.balloon.bind(self.suicide, 'Watch this button disappear!')
scrolledCanvas = Pmw.ScrolledCanvas(parent, canvas_width = 300, canvas_height = 115, ) scrolledCanvas.pack() canvas = scrolledCanvas.component('canvas') self.canvas = canvas
# Create some canvas items and individual help. item = canvas.create_arc(5, 5, 35, 35, fill = 'red', extent = 315) self.balloon.tagbind(canvas, item, 'This is help fornan arc item') item = canvas.create_bitmap(20, 150, bitmap = 'question') self.balloon.tagbind(canvas, item, 'This is help forna bitmap') item = canvas.create_line(50, 60, 70, 80, 85, 20, width = 5) self.balloon.tagbind(canvas, item, 'This is help forna line item') item = canvas.create_text(10, 90, text = 'Canvas items with balloons', anchor = 'nw', font = field.cget('entry_font')) self.balloon.tagbind(canvas, item, 'This is help forna text item')
# Create two canvas items which have the same tag and which use # the same help. canvas.create_rectangle(100, 10, 170, 50, fill = 'aliceblue', tags = 'TAG1') self.bluecircle = canvas.create_oval(110, 30, 160, 80, fill = 'blue', tags = 'TAG1') self.balloon.tagbind(canvas, 'TAG1', 'This is help for the two blue items' + 'n' * 10 + 'It is very, very big.', 'This is help for the two blue items') item = canvas.create_text(180, 10, text = 'Delete', anchor = 'nw', font = field.cget('entry_font')) self.balloon.tagbind(canvas, item, 'After 2 seconds,ndelete the blue circle') canvas.tag_bind(item, '<ButtonPress>', self._canvasButtonpress) scrolledCanvas.resizescrollregion()
scrolledText = Pmw.ScrolledText(parent, text_width = 32, text_height = 4, text_wrap = 'none', ) scrolledText.pack(pady = 5) text = scrolledText.component('text') self.text = text
text.insert('end', 'This is a text widget with ', '', ' balloon', 'TAG1', 'nhelp. Find the ', '', ' text ', 'TAG1', ' tagged with', '', ' help.', 'TAG2', 'n', '', 'Remove tag 1.', 'TAG3', 'nAnother line.nAnd another', '', ) text.tag_configure('TAG1', borderwidth = 2, relief = 'sunken') text.tag_configure('TAG3', borderwidth = 2, relief = 'raised')
self.balloon.tagbind(text, 'TAG1', 'There is one secretnballoon help.nCan you find it?') self.balloon.tagbind(text, 'TAG2', 'Well done!nYou found it!') self.balloon.tagbind(text, 'TAG3', 'After 2 secondsndelete the tag') text.tag_bind('TAG3', '<ButtonPress>', self._textButtonpress)
frame = Tkinter.Frame(parent) frame.pack(padx = 10) self.toggleBalloonVar = Tkinter.IntVar() self.toggleBalloonVar.set(1) toggle = Tkinter.Checkbutton(frame, variable = self.toggleBalloonVar, text = 'Balloon help', command = self.toggle) toggle.pack(side = 'left', padx = 10) self.balloon.bind(toggle, 'Toggle balloon helpnon and off')
self.toggleStatusVar = Tkinter.IntVar() self.toggleStatusVar.set(1) toggle = Tkinter.Checkbutton(frame, variable = self.toggleStatusVar, text = 'Status help', command = self.toggle) toggle.pack(side = 'left', padx = 10) self.balloon.bind(toggle, 'Toggle status help on and off, on and off' + 'n' * 10 + 'It is very, very big, too.', 'Toggle status help on and off')
# Create and pack the MessageBar. messageBar = Pmw.MessageBar(parent, entry_width = 40, entry_relief='groove', labelpos = 'w', label_text = 'Status:') messageBar.pack(fill = 'x', expand = 1, padx = 10, pady = 5)
# Configure the balloon to display its status messages in the # message bar. self.balloon.configure(statuscommand = messageBar.helpmessage)
def toggle(self): if self.toggleBalloonVar.get(): if self.toggleStatusVar.get(): self.balloon.configure(state = 'both') else: self.balloon.configure(state = 'balloon') else: if self.toggleStatusVar.get(): self.balloon.configure(state = 'status') else: self.balloon.configure(state = 'none')
def killButton(self): # Test for old bug when destroying widgets 1) while the # balloon was up and 2) during the initwait period. print 'Destroying button in 2 seconds' self.suicide.after(2000, self.suicide.destroy)
def _canvasButtonpress(self, event): print 'Destroying blue circle in 2 seconds' self.canvas.after(2000, self.deleteBlueCircle)
def deleteBlueCircle(self): self.balloon.tagunbind(self.canvas, self.bluecircle) self.canvas.delete(self.bluecircle)
def _textButtonpress(self, event): print 'Deleting the text tag in 2 seconds' self.text.after(2000, self.deleteTextTag)
def deleteTextTag(self): self.balloon.tagunbind(self.text, 'TAG1') self.text.tag_delete('TAG1')
######################################################################
# Create demo in root window for testing. if __name__ == '__main__': root = Tkinter.Tk() Pmw.initialise(root, 12, fontScheme = 'default') root.title(title)
exitButton = Tkinter.Button(root, text = 'Exit', command = root.destroy) exitButton.pack(side = 'bottom') widget = Demo(root) root.mainloop()
|