1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
"""
Tiny application: convert length measurements from one unit system to another
Select the input and output units using the drop down combo-boxes in the
*Input:* and *Output:* sections respectively. Type the input quantity
to convert into the left most text box. The output value corresponding to the
current input value will automatically be updated in the *Output:*
section.
Use the *Undo* and *ReDo* buttons to undo and redo changes you
have made to any of the input fields.
Note that other than the 'output_amount' property implementation, the rest
of the code is simply declarative.
"""
# FIXME: Help is broken in QT
from __future__ import absolute_import
from traits.api import HasStrictTraits, Trait, CFloat, Property
from traitsui.api import View, VGroup, HGroup, Item
# Help text:
ViewHelp = """
This program converts length measurements from one unit system to another.
Select the input and output units using the drop down combo-boxes in the
*Input:* and *Output:* sections respectively. Type the input quantity
to convert into the left most text box. The output value corresponding to the
current input value will automatically be updated in the *Output:*
section.
Use the *Undo* and *ReDo* buttons to undo and redo changes you
have made to any of the input fields.
"""
# Units trait maps all units to centimeters:
Units = Trait('inches', {'inches': 2.54,
'feet': (12 * 2.54),
'yards': (36 * 2.54),
'miles': (5280 * 12 * 2.54),
'millimeters': 0.1,
'centimeters': 1.0,
'meters': 100.0,
'kilometers': 100000.0})
# Converter Class:
class Converter(HasStrictTraits):
# Trait definitions:
input_amount = CFloat(12.0, desc="the input quantity")
input_units = Units('inches', desc="the input quantity's units")
output_amount = Property(depends_on=['input_amount', 'input_units',
'output_units'],
desc="the output quantity")
output_units = Units('feet', desc="the output quantity's units")
# User interface views:
traits_view = View(
VGroup(
HGroup(
Item('input_amount', springy=True),
Item('input_units', show_label=False),
label='Input',
show_border=True
),
HGroup(
Item('output_amount', style='readonly', springy=True),
Item('output_units', show_label=False),
label='Output',
show_border=True
),
help=ViewHelp
),
title='Units Converter',
buttons=['Undo', 'OK', 'Help']
)
# Property implementations
def _get_output_amount(self):
return ((self.input_amount * self.input_units_) / self.output_units_)
# Create the demo:
popup = Converter()
# Run the demo (if invoked from the command line):
if __name__ == '__main__':
popup.configure_traits()
|