TITLE OF PAPER: Traits - The Next Generation URL OF PRESENTATION: PRESENTED BY: David Morrill REPRESENTING: Enthought CONFERENCE: PyCon 2005 DATE: Wednesday, March 23, 2005 LOCATION: GWU Cafritz Conference Center, Marvin (Pressure Cooker) Theatre -------------------------------------------------------------------------- REAL-TIME NOTES / ANNOTATIONS OF THE PAPER: {If you've contributed, add your name, e-mail & URL at the bottom} PyCon presentation two years ago * Core Traits * Spin off of Chaco project This year we talk about the next generation Traits History Traits 1: Mid 2002, spin-off from the Chaco project. Pure Python. Talk on Traits 1 presented at PyCon 2003 Traits 2: mid 2004, Major rewrite, converted to "new style" Python types using a C-based extension module. Much faster with a streamlined syntax Validation Every trait has an associated "type" or set of values that can be assigned Or the type can be very (psychotically) flexible Trait(0.0, Range(0.0, 1.0), Enum('low', 'middle', 'high')) Traits comes with a number of predefined types Constant,int, float.. Initialization Must have default value Does not require explicit consturtors Delegation Traits can be delegated, on whole, or selectively The granularity of delegation is at a trait level Delegated traits use no space until assigned to Notification Changed value triggers notification.. [Delegation Example] (rather un-pythonic syntax) Notification Changes to a trait's value can trigger "notification handlers" Two types of notifications: normal - only triggers when the value changes event - triggers on every assignment (even if there's no change) Two types of notification handlers Static - defined in the class that defines the trait via naming conv Dynamic - using the on_trait_change(...) method Performance implications of notification? Is notification plugable? Visualization User interfaces can be easily constructed for objects with traits Supports several different styles of UI Panel, subpanel, modal, nonmodal, livemodal, live, wizard Supports MVC paradigm Each trait has a default "editor" associated with it. There is a large set of predefined trait editors boolean, button, enum, font, tree, ... New editors can be defined Cross-platform, cross-GUI (sort of) Supports Automatic change history (undo/redo/etc.) Automatic and user-defined help screens Modal or "live" dialogs Menus, Toolbars Dynamic updates via event handlers Implementation Traits 2 based on "new style" Python classes Core functionality in a C extension Initialization, validation, delegation, and notification all in C Speed Traits faster than old/new style __gets__ Puts between old/new style __puts__ Notifications add a ton of (Python code) overhead to sets VET (View Editing Tool) Interactive tool for creating traits-based user interfaces Automatically generates Python modules based on an MVC framework Somewhat different than a VB-style tool: you start with your Model and it helps you build the View and Controller. VET is itself a traits-based UI Still in development, but already useful Status Traits is an Enthought core package, used by: Chaco (plotting) Enable (component framework) Envisage (Eclipse-like plug-in framework) Graph Pyface (wxPython model-based widgets) Fairly stable. Mostly tested on Win32, but some use on Linux To do: Add more editors (e.g. Table/List editor) More docs (currently 132+ pp.) Support more GUI toolkits (OS X?) (HTML? I'm guessing not, since the whole disableIf() thing would have to be totally rethought.) (he mentioned Tk as one currently supported GUI) Issue first release Example code: The code is more "declarative" as in you don't write much code to do stuff but rather declare stuff to make stuff happen. -------------------------------------------------------------------------- REFERENCES: {as documents / sites are referenced add them below} -------------------------------------------------------------------------- QUOTES: -------------------------------------------------------------------------- CONTRIBUTORS: {add your name, e-mail address and URL below} Nick Bastin (nick.bastin@gmail.com) Abhay Saxena Linden Wright Andy Wright -------------------------------------------------------------------------- E-MAIL BOUNCEBACK: {add your e-mail address separated by commas } Erik Rose -------------------------------------------------------------------------- NOTES ON / KEY TO THIS TEMPLATE: A headline (like a field in a database) will be CAPITALISED This differentiates from the text that follows A variable that you can change will be surrounded by _underscores_ Spaces in variables are also replaced with under_scores This allows people to select the whole variable with a simple double-click A tool-tip is lower case and surrounded by {curly brackets / parentheses} These supply helpful contextual information. -------------------------------------------------------------------------- Copyright shared between all the participants unless otherwise stated...