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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#--(LED Editor)-----------------------------------------------------------------
"""
LED Editor
==========
In Traits 3.0, a new **LEDEditor** has been added to the Traits UI package. The
editor allows displaying (but not editing) numeric values using a set of
simulated LEDs.
This editor is currently only available in the wxPython version of the Traits UI
in the *traitsui.wx.extras* package. The purpose of the *extras*
package is to provide a location for editors which may be toolkit specific, and
not necessarily available in all Traits UI toolkit packages.
The traits supported by the **LEDEditor** editor are as follows:
alignment
Specifies the alignment of the numeric text within the control. The possible
values are: *right* (the default), *left* and *center*.
The value edited by an **LEDEditor** should be an integer or float value,
or a string value containing only characters that would be found in an interger
or float value.
"""
#--[Imports]--------------------------------------------------------------------
from threading \
import Thread
from time \
import sleep
from traits.api \
import HasTraits, Instance, Int, Float, Bool
from traitsui.api \
import View, Item, HGroup, Handler, UIInfo, spring
from traitsui.wx.extra.led_editor \
import LEDEditor
#--[LEDDemoHandler Class]-------------------------------------------------------
# Handler class for the LEDDemo class view:
class LEDDemoHandler ( Handler ):
# The UIInfo object associated with the UI:
info = Instance( UIInfo )
# Is the demo currently running:
running = Bool( True )
# Is the thread still alive?
alive = Bool( True )
def init ( self, info ):
self.info = info
Thread( target = self._update_counter ).start()
def closed ( self, info, is_ok ):
self.running = False
while self.alive:
sleep( .05 )
def _update_counter ( self ):
while self.running:
self.info.object.counter1 += 1
self.info.object.counter2 += .001
sleep( .01 )
self.alive = False
#--[LEDDemo Class]--------------------------------------------------------------
# The main demo class:
class LEDDemo ( HasTraits ):
# A counter to display:
counter1 = Int
# A floating point value to display:
counter2 = Float
# The traits view:
view = View(
Item( 'counter1',
label = 'Left aligned',
editor = LEDEditor( alignment = 'left' )
),
Item( 'counter1',
label = 'Center aligned',
editor = LEDEditor( alignment = 'center' )
),
Item( 'counter1',
label = 'Right aligned',
editor = LEDEditor() # default = 'right' aligned
),
Item( 'counter2',
label = 'Float value',
editor = LEDEditor( format_str = '%.3f' )
),
'_',
HGroup(
Item( 'counter1',
label = 'Left',
height = -40,
width = 120,
editor = LEDEditor( alignment = 'left' )
),
spring,
Item( 'counter1',
label = 'Center',
height = -40,
width = 120,
editor = LEDEditor( alignment = 'center' )
),
spring,
Item( 'counter1',
label = 'Right',
height = -40,
width = 120,
editor = LEDEditor() # default = 'right' aligned
),
spring,
Item( 'counter2',
label = 'Float',
height = -40,
width = 120,
editor = LEDEditor( format_str = '%.3f' )
)
),
title = 'LED Editor Demo',
buttons = [ 'OK' ],
handler = LEDDemoHandler
)
#--<Example*>-------------------------------------------------------------------
demo = LEDDemo()
|