#!/usr/bin/env python
#
# $Id: ProgressDialog.py,v 1.3 2001/11/03 11:05:22 doughellmann Exp $
#
# Copyright 2001 Doug Hellmann.
#
#
# All Rights Reserved
#
# Permission to use, copy, modify, and distribute this software and
# its documentation for any purpose and without fee is hereby
# granted, provided that the above copyright notice appear in all
# copies and that both that copyright notice and this permission
# notice appear in supporting documentation, and that the name of Doug
# Hellmann not be used in advertising or publicity pertaining to
# distribution of the software without specific, written prior
# permission.
#
# DOUG HELLMANN DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
# NO EVENT SHALL DOUG HELLMANN BE LIABLE FOR ANY SPECIAL, INDIRECT OR
# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS
# OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
# CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
#
"""A Pmw style dialog for showing the progress being made on a task.
"""
__rcs_info__ = {
#
# Creation Information
#
'module_name' : '$RCSfile: ProgressDialog.py,v $',
'rcs_id' : '$Id: ProgressDialog.py,v 1.3 2001/11/03 11:05:22 doughellmann Exp $',
'creator' : 'Doug Hellmann <doug@hellfly.net>',
'project' : 'PmwContribD',
'created' : 'Sat, 05-May-2001 12:19:03 EDT',
#
# Current Information
#
'author' : '$Author: doughellmann $',
'version' : '$Revision: 1.3 $',
'date' : '$Date: 2001/11/03 11:05:22 $',
}
#
# Import system modules
#
import Tkinter, Canvas
import Pmw
import sys, os, string, math
#
# Import Local modules
#
import ProgressMeter
#
# Module
#
class ProgressDialog(Pmw.Dialog):
"""A Pmw style dialog for showing progress being made in a separate dialog.
Options
'metertype' -- Class to use to instantiate the progress meter
within the dialog. Class should use interface similar to
'ProgressMeter'.
Components
'meter' -- Progress meter instance.
"""
def __init__(self, parent=None, **kw):
"""Create a ProgressMeter.
"""
optiondefs = (
('metertype', ProgressMeter.ProgressMeter, Pmw.INITOPT),
)
self.defineoptions(kw, optiondefs)
# Initialize the base class
Pmw.Dialog.__init__(self, parent=parent)
# Create our interface
self._createInterior()
# Check for initialization options
# for this class
self.initialiseoptions(ProgressDialog)
return
def _createInterior(self):
"Construct the interior widgets."
self.meter = self.createcomponent('meter', (), None,
self['metertype'],
#(self['dialogchildsite'],),
(self.interior(),)
)
self.meter.pack(side=Tkinter.TOP,
expand=Tkinter.YES,
fill=Tkinter.X,
)
return
if __name__ == '__main__':
import GuiAppD
class PDTest(GuiAppD.GuiAppD):
appname = 'Test the ProgressDialog widget'
def createInterface(self):
self.createcomponent('Meter', (), None,
Tkinter.Button,
(self.interior(),),
command=self.startMeter,
text='Meter',
).pack(
side=Tkinter.TOP)
self.createcomponent('Dial', (), None,
Tkinter.Button,
(self.interior(),),
command=self.startDial,
text='Dial',
).pack(
side=Tkinter.TOP)
def startMeter(self):
dlg = ProgressDialog(self.interior(),
meter_labelpos='n', meter_label_text='Meter Example',
meter_meter_width=300,
#meter_troughcolor='slateblue',
meter_progresscolor='slateblue',
)
meter = dlg.component('meter')
for step, max in (
('Step 1', 100),
('Step 2', 1000),
#('Step 3', 10000),
('Step 3', 283),
):
meter.updateMessage(step)
meter.configure(finishvalue=max)
for i in range(max+1):
meter.updateProgress(i)
#dlg.withdraw()
def startDial(self):
dlg = ProgressDialog(self.interior(), metertype=ProgressMeter.ProgressDial,
meter_labelpos='w',
meter_label_text='Dial Example',
title='Dial Test',
command=self.dialCB,
)
meter = dlg.component('meter')
self.currentDialDlg = dlg
for step, max in (
('Step 1', 100),
('Step 2', 1000),
('Step 3', 283),
):
meter.updateMessage(step)
meter.configure(finishvalue=max)
for i in range(max+1):
meter.updateProgress(i)
def dialCB(self, button='default'):
print 'button was :', button
self.currentDialDlg.withdraw()
PDTest().run()
|