Permalink
Fetching contributors…
Cannot retrieve contributors at this time
133 lines (105 sloc) 3.42 KB
# Copyright (c) 2007, Enthought, Inc.
# License: BSD Style.
"""
This shows a table editor which has a checkbox column in addition to normal
data columns.
"""
# Imports:
from random \
import randint
from traits.api \
import HasStrictTraits, Str, Int, Float, List, Bool, Property
from traitsui.api \
import View, Item, TableEditor
from traitsui.table_column \
import ObjectColumn
from traitsui.extras.checkbox_column \
import CheckboxColumn
# Create a specialized column to set the text color differently based upon
# whether or not the player is in the lineup:
class PlayerColumn(ObjectColumn):
# Override some default settings for the column:
width = 0.08
horizontal_alignment = 'center'
def get_text_color(self, object):
return ['light grey', 'black'][object.in_lineup]
# The 'players' trait table editor:
player_editor = TableEditor(
sortable=False,
configurable=False,
auto_size=False,
selected_indices='selected_player_indices',
columns=[CheckboxColumn(name='in_lineup', label='In Lineup',
width=0.12),
PlayerColumn(name='name', editable=False, width=0.24,
horizontal_alignment='left'),
PlayerColumn(name='at_bats', label='AB'),
PlayerColumn(name='strike_outs', label='SO'),
PlayerColumn(name='singles', label='S'),
PlayerColumn(name='doubles', label='D'),
PlayerColumn(name='triples', label='T'),
PlayerColumn(name='home_runs', label='HR'),
PlayerColumn(name='walks', label='W'),
PlayerColumn(name='average', label='Ave',
editable=False, format='%0.3f')])
# 'Player' class:
class Player(HasStrictTraits):
# Trait definitions:
in_lineup = Bool(True)
name = Str
at_bats = Int
strike_outs = Int
singles = Int
doubles = Int
triples = Int
home_runs = Int
walks = Int
average = Property(Float)
def _get_average(self):
""" Computes the player's batting average from the current statistics.
"""
if self.at_bats == 0:
return 0.0
return float(self.singles + self.doubles +
self.triples + self.home_runs) / self.at_bats
class Team(HasStrictTraits):
# Trait definitions:
players = List(Player)
selected_player_indices = List
# Trait view definitions:
traits_view = View(
Item('players',
show_label=False,
editor=player_editor
),
title='Baseball Team Roster Demo',
width=0.5,
height=0.5,
resizable=True
)
def random_player(name):
""" Generates and returns a random player.
"""
p = Player(name=name,
strike_outs=randint(0, 50),
singles=randint(0, 50),
doubles=randint(0, 20),
triples=randint(0, 5),
home_runs=randint(0, 30),
walks=randint(0, 50))
return p.trait_set(
at_bats=p.strike_outs +
p.singles +
p.doubles +
p.triples +
p.home_runs +
randint(
100,
200))
# Create the demo:
demo = view = Team(players=[random_player(name) for name in [
'Dave', 'Mike', 'Joe', 'Tom', 'Dick', 'Harry', 'Dirk', 'Fields', 'Stretch'
]])
# Run the demo (if invoked from the command line):
if __name__ == '__main__':
demo.configure_traits()