Home
TraitsUI 4 User Manual
Contents
1. All of these window types are identical in appearance Also all types support the buttons attribute which is described in Command Buttons the buttons Attribute Usually a window with command buttons is called a dialog box Wizards Unlike a window whose contents generally appear as a single page or a tabbed display a wizard is presented as a series of pages that a user must navigate sequentially TraitsUI Wizards are always modal and live They always display a standard wizard button set i e they ignore the buttons View attribute In short wizards are considerably less flexible than windows and are primarily suitable for highly controlled user interactions such as software installation Panels and Subpanels Both dialog boxes and wizards are secondary windows that appear separately from the main program display if any Often however you might need to create a window element that is embedded in a larger display For such cases the kind of the corresponding View object should be panel or subpanel lt A panel is very similar to a window except that it is embedded in a larger window which need not be a TraitsUI window Like windows panels support the buttons View attribute as well as any menus and toolbars that are specified for the View see Menus and Menu Bars Panels are always live and nonmodal A subpanel is almost identical to a panel The only difference is that subpanels do not display command buttons e
2. default_traits_view py Sample code to demonstrate the use of traits_view from traits api import HasTraits Str Int from traitsui api import View Item Group import traitsui class SimpleEmployee2 HasTraits first_name Str last_name Str department Str mployee_number Str salary Int traits_view View Group Item name first_name Item name last_name 1 5 Advanced View Concepts 19 TraitsUI 4 User Manual Release 4 6 0 dev153 Item name department label Personnel profile show_border True sam SimpleEmployee2 sam configure_traits In this example configure_traits no longer requires a view keyword argument the traits_view attribute is used by default resulting in the same display as in Figure 3 Ee edit proper TER Personnel profile First name Last name Department Fig 1 5 Figure 5 User interface for Example 5 It is not strictly necessary to call this View attribute traits_view If exactly one View attribute is defined for a HasTraits class that View is always treated as the default display template for the class However if there are multiple View attributes for the class as discussed in the next section if one is named traits_view it is always used as the default Sometimes it is necessary to build a view based on the state of the object when it is being built In such cases defining the vie
3. Moving rows up and down using the keyboard Inserting and deleting items using the keyboard Initiating editing of items using the keyboard Dragging and dropping of table items to and from the editor including support for both copy and move operations for single and multiple items Visually appealing The tabular editor in general uses the underlying operating system s native table or grid control and as a result often looks better than the control used by the table editor Supports displaying text and images in any cell However the images displayed must be all the same size for optimal results 1 10 Advanced Trait Editors 79 TraitsUI 4 User Manual Release 4 6 0 dev153 Disadvantages e Not as full featured The table editor includes support for arbitrary data filters searches and different types of sorting These differences may narrow as features are added to the tabular editor e Limited data editing capabilities The tabular editor supports editing only textual values whereas the table editor supports a wide variety of column editors and can be extended with more as needed This is due to limitations of the underlying native control used by the tabular editor TabularAdapter The tabular editor works in conjunction with an adapter class derived from TabularAdapter The tabular adapter interfaces between the tabular editor and the data being displayed The tabular adapter is the reason for the flexi
4. This is an ordered list x One x Two x Three ImageEnumEditor Suitable for Enum Any Default for none Required parameters for non Enum traits values or name Optional parameters path klass or module cols evaluate suffix The editors generated by ImageEnumEditor enable the user to select an item in an enumeration by selecting an image that represents the item T Text top right ReadOnly Fig 1 35 Figure 35 Editor styles for image enumeration The custom style of editor displays a set of images the user selects one by clicking it and it becomes highlighted to indicate that it is selected The simple style displays a button with an image for the currently selected item When the user clicks the button a pop up panel displays a set of images similar to the custom style The user clicks an image which becomes the new image on the button The text style does not display images it displays the text representation of the currently selected item The user must type the text representation of another item to select it The read only style displays the image for the currently selected item which the user cannot change The ImageEnumEditor function accepts the same parameters as the EnumEditor function see EnumEditor as well as some additional parameters Note Image enumeration editors do not use ImageResource Unlike most other images in the Traits and TraitsUI packages images in t
5. Bill Johnson Fig 1 10 Figure 10 Theme Traits user interface with alternate theme 1 7 TraitsUI Themes 33 TraitsUI 4 User Manual Release 4 6 0 dev153 1 7 1 Theme Data All of the data used by TraitsUI for themes is in the form of simple images a few examples of which are shown in Figure 11 Fig 1 11 Figure 11 Theme images Any type of JPEG or Portable Network Graphics PNG file is supported In particular PNG files with alpha infor mation allow smooth compositing of multiple theme images The first image in Figure 11 is an example of a PNG file containing alpha information That is the interior of the rectangle is not gray but transparent with a thin alpha gradient shadow around its edges 34 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 7 2 Themeable TraitsUI Elements Theme information can be applied to the following classes of TraitsUI objects e Group e Item e View All of these classes have item_theme and label_theme attributes which specify the themes for an editor and its label respectively the Group class also has a group_theme attribute which specifies the theme for the group itself These attributes are defined to be Theme traits which accept values which are either PyFace ImageResource objects or strings that specify an image file to use In the case of string values no path information need be included The path to the image file is assumed to be
6. The help_id attribute is ignored by the default help handler but can be used by a custom help handler Unique identifier The id attribute is used as a key for saving user preferences about the widget If id is not specified the id values of the elements of the group are concatenated and used as the group identifier 12 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Subclasses of Group The TraitsUI package defines the following subclasses of Group which are helpful shorthands for defining certain types of groups Refer to the Traits API Reference for details Subclasses of Group Sub Description Equivalent To class HGroup A group whose items are laid out horizontally Group orientation horizontal HFlow A horizontal group whose items wrap when Group orientation horizontal they exceed the available horizontal space layout flow show_labels False HSplit A horizontal group with splitter bars to separate Group orientation horizontal it from other groups layout split Tabbed A group that is shown as a tab in a notebook Group orientation horizontal ayout tabbed springy True VGroup A group whose items are laid out vertically Group orientation vertical VFlow A vertical group whose items wrap when they Group orient
7. TraitsUI 4 User Manual Release 4 6 0 dev153 Enthought Inc August 18 2015 Contents 1 TraitsUI 4 User Manual Ll TratsULA User Manual 32 5 5 4 24 64 e326 beak ban deb eek 4 aS ERS 1 2 Introduction s eee esternare 44 FM ee Hw PAS OS ee ee Ai 13 The View and Its Building Blocks e eos 2 24 04 2 44 684360404 408 w oe 4 LA iCustomizimga View s coros 4 aegis ee eR Bo a Roo BRS Re EE A 15 Advanced View Concepts ss seac icta cesio ea ew eee ee 1 6 Controlling the Interface the Handler s p 0 cpa be ee eR L7 TratsUl Themes 20 sea ee Ga Re ee aa ee eS hae ee 1 8 Introduction to Trait Editor Pactonmes s yoe cok eG eS Ba 1 9 The Predefined Trait Editor Factories os spt rep ee gpa aiie ee ES 1 10 Advanced Trait Editors o i S geai 6 2 aa ete ee EES 4 EOE L11 Extra Trait Editor Factories socca 4 Skee wk Ha PAS Se Ee E H Mps Tricks and Gochas ma rama e ee Ree eek ae ee bebe oo ee a 1 13 Appendix I Glossary of Terms lt 4 e525 44 bob ees Ge wee ee E 1 14 Appendix II Editor Factories for Predefined Traits 0 2 TraitsUI 4 Tutorials 2 1 Writing a graphical application for scientific programming using TraitsUI 4 3 TraitsUI 4 Demos BS Standard Editon ses g a aeure ec Ee le ee Bh we Hs Aree ao eS Re ee os 3 2 Advanced Demos 4 44 24 e68 eH SR SOA we EAE Roe OE RA EY a 4 Indices and tables CHAPTER 1 TraitsUI 4 User Manual 1 1 TraitsUI 4 User Manual
8. This factory is available only on Microsoft Windows platforms The attribute being edited must have value whose text representation is a URL If the value is a Unicode string it must contain only characters that are valid for URLs The back forward home refresh search and stop parameters are extended names of event attributes that represent the user clicking on the corresponding buttons in the standard IE interface The IE buttons are not displayed by the editor you must create buttons separately in the View if you want the user to be able to actually click buttons The html page_loaded status and title parameters are the extended names of string attributes which the editor updates with values based on its own state You can display these attributes elsewhere in the View e html The current page content as HTML as would be displayed by the View gt Source command in IE e page_loaded The URL of the currently displayed page this may be different from the URL represented by the attribute being edited e status The text that would appear in the IE status bar e title The title of the currently displayed page 1 11 7 ImageEditor Suitable for any Default for none 1 11 Extra Trait Editor Factories 91 TraitsUI 4 User Manual Release 4 6 0 dev153 Optional parameters image scale preserve_aspect_ratio allow_upscaling allow_clipping ImageEditor generates a read only display of an image The image
9. attribute that is reachable from an object in the context This is true regardless of whether the context contains a single object or multiple objects For example Item object axle chassis serial_number where object is the literal name which refers to the top level object being viewed Note that object is not some user defined attribute name like axle in this example More precisely object is the default name in the view s context dictionary of this top level viewed object see Advanced View Concepts Because an Item can refer only to a single trait do not use extended trait references that refer to multiple traits since the behavior of such references is not defined Also avoid extended trait references where one of the intermediate objects could be None because there is no way to obtain a valid reference from None Refer to the Traits User Manual in the chapter on trait notification for details of the extended trait name syntax 1 5 5 Include Objects In addition to the Item and Group class a third building block class for Views exists in TraitsUI the Include class For the sake of completeness this section gives a brief description of Include objects and their purpose and usage However they are not commonly used as of this writing and should be considered unsupported pending redesign In essence an Include object is a placeholder for a named Group or Item object that is specified outside
10. dynamic interface behavior In TraitsUI such actions are performed by a Handler object In the preceding examples in this guide the Handler object has been implicit TraitsUI provides a default Handler that takes care of a common set of GUI events including window initialization and closure data value updates and button press events for the standard TraitsUI window buttons see Command Buttons the buttons Attribute This chapter explains the features of the TraitsUI Handler and shows how to implement custom GUI behaviors by building and instantiating custom subclasses of the Handler class The final section of the chapter describes several techniques for linking a custom Handler to the window or windows it is designed to control 1 6 1 Backstage Introducing the Ullnfo Object TraitsUI supports the MVC design pattern by maintaining the model view and controller as separate entities A single View object can be used to construct windows for multiple model objects likewise a single Handler can handle GUI events for windows created using different Views Thus there is no static link between a Handler and any particular window or model object However in order to be useful a Handler must be able to observe and manipulate both its corresponding window and model objects In TraitsUI this is accomplished by means of the UInfo object Whenever TraitsUI creates a window or panel from a View a UIInfo object is created to act as the Handler s re
11. is used directly by client code It contains a dictionary of the named ViewElement objects defined for the object whose configure_traits or edit_traits method was called 1 5 4 The View Context All three of the methods described in Displaying a View have a context parameter This parameter can be a single object or a dictionary of string object pairs the object or objects are the model objects whose traits attributes are to be edited In general a context is a Python dictionary whose keys are strings the key strings are used to look up the values In the case of the context parameter to the ui method the dictionary values are objects In the special case where only one object is relevant it can be passed directly instead of wrapping it in a dictionary When the ui method is called from configure_traits or edit_traits on a HasTraits object the relevant object is the HasTraits object whose method was called For this reason you do not need to specify the context argument in most calls to configure_traits or edit_traits However when you call the ui method on a View object you must specify the context parameter so that the ui method receives references to the objects whose trait attributes you want to modify So if configure_traits figures out the relevant context for you why call ui at all One answer lies in multi object Views Multi Object Views A multi object view is any view whose contents depend on
12. 08 06 PM 0871372007 trait_errors py 4058 12 11 35 PM 0971172007 trait_handlers py 112372 12 10 01 PM 11 03 2007 trait_notifiers py 27635 01 28 49 PM 1070372007 trait numeric py 14070 12 10 01 PM 11 09 2007 Fig 1 53 Figure 53 Tabular editor on MS Windows Depending on how the tabular editor is configured certain keyboard interactions may be available For some interac tions you must specify that the corresponding operation is allowed by including the operation name in the operations list parameter of TabularEditor e Up arrow Selects the row above the currently selected row Down arrow Selects the row below the currently selected row Page down Appends a new item to the end of the list append operation e Left arrow Moves the currently selected row up one line move operation e Right arrow Moves the currently selected row down one line move operation Backspace Delete Deletes from the list all items in the current selection delete operation e Enter Escape Initiates editing on the current selection edit operation e Insert Inserts a new item before the current selection insert operation The append move edit and insert operations can occur only when a single item is selected The delete operation works for one or more items selected Depending on how the editor and adapter are specified drag and drop operations may be
13. 38 List editor styles The simple style displays a single item at a time with small arrows on the right side to scroll the display The custom style shows multiple items The number of items displayed is controlled by the rows parameter if the number of items in the list exceeds this value then the list display scrolls The editor used for each item in the list is determined by the editor and style parameters The text style of list editor is identical to the custom style except that the editors for the items are text editors The read only style displays the contents of the list as static text By default the items use the trait handler appropriate to the type of items in the list You can specify a different handler to use for the items using the trait_handler parameter For the simple custom and text list editors a button appears to the left of each item editor clicking this button opens a context menu for modifying the list as shown in Figure 39 In addition to the four standard styles for list editors a fifth list editor user interface option is available If use_notebook is True then the list editor displays the list as a notebook of tabbed pages one for each item in the list as shown in Figure 40 This style can be useful in cases where the list items are instances with their own views If the deletable parameter is True a close box appears on each tab allowing the user to delete the item the user cannot add items interacti
14. Authors Lyn Pierce Janet Swisher Version Document Version 4 Copyright 2005 2008 Enthought Inc All Rights Reserved Redistribution and use of this document in source and derived forms with or without modification are permitted provided that the following conditions are met e Redistributions of source or derived format for example Portable Document Format or Hypertext Markup Language must retain the above copyright notice this list of conditions and the following disclaimer e Neither the name of Enthought Inc nor the names of contributors may be used to endorse or promote products derived from this document without specific prior written permission THIS DOCUMENT IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES INCLUDING BUT NOT LIMITED TO THE IMPLIED WAR RANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT IN DIRECT INCIDENTAL SPECIAL EXEMPLARY OR CONSEQUENTIAL DAMAGES INCLUDING BUT NOT LIMITED TO PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES LOSS OF USE DATA OR PROFITS OR BUSINESS INTERRUPTION HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY WHETHER IN CONTRACT STRICT LIABILITY OR TORT INCLUDING NEGLIGENCE OR OTHERWISE ARISING IN ANY WAY OUT OF THE USE OF THIS DOCUMENT EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE All trademarks and registered trad
15. Figure 57 shows the default theme 1 11 10 ThemedCheckboxEditor Suitable for Boolean Default for none Optional parameters label theme hover_off_image hover_off_theme hover_on_image hover_on_theme image on_image on_theme position spacing 92 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Fig 1 57 Figure 57 Themed buttons in various states loff x On Hover OFF DE Hover On Fig 1 58 Figure 58 Themed checkbox in various states The ThemedCheckboxEditor factory generates a checkbox that is formatted according to specified or default themes All editor styles have the same appearance The theme related parameters determine the appearance of the checkbox in the various states shows the default theme If label is not specified for the editor factory the value is inherited from the label value of the enclosing Item Both labels may be displayed if the Item s label is not hidden 1 11 11 ThemedSliderEditor Suitable for Range Default for none Optional parameters alignment bg_color high increment low show_value slider_color text_color tip_color The ThemedSliderEditor factory generates a slider control that is formatted according to specified or default themes All editor styles have the same appearance The value is edited by modifying its textual representation The back ground of the control updates to reflect the value relative to the to
16. Gain desc gain def acquire self experiment X Y indices 100 100 Z xp X experiment x 2 Y experiment y 2 experiment width 2 Z 1 2 rand 100 100 Z x self exposur Z Z gt 2 2 Z Zxxself gain return Z 114 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 Threads and flow control There are three threads in this application e The GUI event loop the only thread running at the start of the program e The acquisition thread started through the GUI This thread is an infinite loop that waits for the camera to be triggered retrieves the images displays them and spawns the processing thread for each image received e The processing thread started by the acquisition thread This thread is responsible for the numerical intensive work of the application It processes the data and displays the results It dies when it is done One processing thread runs per shot acquired on the camera but to avoid accumulation of threads in the case that the processing takes longer than the time lapse between two images the acquisition thread checks that the processing thread is done before spawning a new one def process image results_obj r Function called to do the processing X Y indices image shape x sum Xximage sum image y sum Yx ximage sum image width sqrt abs sum X x 2 Y y 2 image sum image r
17. HGroup 13 HSplit 13 icon attribute 18 id attribute Group 12 Item 6 View 18 image attribute Group 10 Item 6 View 18 imports attribute 18 Include examples 25 object 25 instance 97 Item 97 attributes 6 object 6 subclasses 8 item_theme attribute Group 10 Item 6 View 18 K key_bindings attribute 18 kind attribute 13 L label attribute Group 10 Item 6 Label class 8 label_theme attribute Group 10 Item 6 View 18 layout attribute 10 live 97 definition 14 window kind 13 LiveButtons 16 livemodal 97 livemodal window kind 13 M menubar attribute 18 modal 97 definition 14 window kind 13 ModalButtons 16 model 2 98 Model View Controller 2 model_view attribute 18 ModelView built in class 27 multi object Views 23 examples 23 multiple Views 21 examples 21 MVC 97 MVC design pattern 2 N name attribute 6 NoButtons 16 nonmodal 98 nonmodal window kind 13 null toolkit 3 O object 98 128 Index TraitsUI 4 User Manual Release 4 6 0 dev153 Include 25 Item 6 View 4 5 object attribute Group 10 View 18 OKButton 15 OKCancelsButtons 16 on_apply attribute 18 orientation attribute 10 P padding attribute Group 10 Item 6 panel 14 98 window kind 13 predefined trait type 98 Q Qt toolkit 3 R resizable attribute 6 View 18 RevertButton 15 S scrollable attribute 18 selected attrib
18. This code creates a Point class Points objects can be created as instances of the Point class gt gt gt from numpy import pi gt gt gt p Point gt gt gt p x 1 gt gt gt p rotate_z pi gt gt gt p x 1 0 gt gt gt p y 1 2246467991473532e 16 When manipulating objects the developer does not need to know the internal details of their procedures As long as the object has a rotate method the developer knows how to rotate it Note Beginners often use objects as structures entities with several data fields useful to pass data around in a program Objects are much more then that they have methods They are active data structures that know how to modify themselves Part of the point of object oriented programming is that the object is responsible for modifying itself through its methods The object therefore takes care of its internal logic and the consistency between its attributes In python dictionaries make great structures and are more suited for such a use than objects Classes and inheritance Suppose you have already created a Point class that tells your program what a point is but that you also want some points to have a color Instead of copy and pasting the Point class and adding a color attribute you can define a new class ColoredPoint that inherits all of the Point class s methods and attributes class ColoredPoint Point wn Golored SD pore vr color white You
19. Traits class EditorFactory Editor factories generate the actual widgets used in a user interface You can use an editor factory without knowing what the underlying GUI toolkit is factory An object used to produce other objects at run time without necessarily assigning them to named variables or attributes A single factory is often parameterized to produce instances of different classes as needed Group An object that specifies an ordered set of Items and other Groups for display in a TraitsUI View Various display options can be specified by means of attributes of this class including a border a group label and the orientation of elements within the Group An instance of the TraitsUI class Group Handler A TraitsUI object that implements GUI logic data manipulation and dynamic window behavior for one or more user interface windows A Handler instance fills the role of controller in the MVC design pattern An instance of the TraitsUI class Handler HasTraits A class defined in the Traits package to specify objects whose attributes are typed That is any attribute of a HasTraits subclass can be a trait attribute instance A concrete entity belonging to an abstract category such as a class In object oriented programming termi nology an entity with allocated memory storage whose structure and behavior are defined by the class to which it belongs Often called an object Item A non subdividable element of a Traits user interface specificatio
20. a tree editor has auto_open setting of 2 and contains a tree node at level 3 whose auto_open attribute is True The nodes at level 3 are not displayed initially but when the user expands a level 2 node displaying the level 3 node that s nodes children are automatically displayed also Similarly the number of levels of nodes initially displayed can be greater than specified by the tree editor s auto_open setting if some of the nodes have auto_open set to True If the auto_close attribute of TreeNode is set to True then when a node is expanded any siblings of that node are automatically closed In other words only one node of this type can be expanded at a time Editing Objects One pane of the tree editor displays a user interface for editing the object that is selected in the tree You can specify a View to use for each node type using the view attribute of TreeNode If you do not specify a view then the default view for the object is displayed To suppress the editor pane set the editable parameter of TreeEditor to False in this case the objects represented by the nodes can still be modified by other means such as shortcut menu commands You can define multiple tree editors that share a single editor pane Each tree editor has its own tree pane Each time the user selects a different node in any of the sharing tree controls the editor pane updates to display the user interface for the selected object To establish this relationship
21. also staying responsive to other events In the real world application that serves as the basis of this tutorial there are 2 threads and a GUI event loop The first thread is an acquisition loop during which the program loops waiting for a image to be captured on the camera the camera is controlled by external signals Once the image is captured and transfered to the computer the 110 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 acquisition thread saves it to the disk and spawns a thread to process the data then returns to waiting for new data while the processing thread processes the data Once the processing thread is done it displays its results by inserting the display events in the GUI event loop and dies The acquisition thread refuses to spawn a new processing thread if there still is one running This makes sure that data is never lost no matter how long the processing might be There are thus up to 3 set of instructions running concurrently the GUI event loop responding to user generated events the acquisition loop responding to hardware generated events and the processing jobs doing the numerical intensive work In the next section we are going to see how to add a home made element to traits in order to add new possibilities to our application 2 1 4 Extending TraitsUI Adding a matplotlib figure to our application This section gives a few guidelines on how to build your own t
22. api import x from traitsui api import View Item Group HSplit Handler from traitsui menu import NoButtons from mpl_figure_editor import MPLFigureEditor from matplotlib figure import Figure from scipy import x import wx User interface objects These objects store information for the program to interact with the user via traitsUI class Experiment HasTraits Object that contains the parameters that control the experiment modified by the user nnmn width Float 30 label Width desc width of the cloud x Float 50 label X desc X position of the center y Float 50 label Y desc Y position of the center class Results HasTraits Object used to display the results noe width Float 30 label Width desc width of the cloud x Float 50 label X desc X position of the center y Float 50 label Y desc Y position of the center view View Item width style readonly Item x style readonly Item y style readonly The camera object also is a real object and not only a data structure it has a method to acquire an image or in our case simulate acquiring using its attributes as parameters for the acquisition class Camera HasTraits rur Camera objects Implements both the camera parameters controls and the picture acquisition won exposure Float 1 label Exposure desc exposure in ms gain Enum 1 2 3 label
23. available If the user selects multiple items and drags one of them all selected items are included in the drag operation If the user drags a non selected item only that item is dragged The editor supports both drag move and drag copy semantics A drag move operation means that the dragged items are sent to the target and are removed from the list displayed in the editor A drag copy operation means that the dragged items are sent to the target but are not deleted from the list data 1 10 7 TreeEditor Suitable for Instance Default for none Required parameters nodes required except for shared editors see Editing Objects Optional parameters auto_open editable editor hide_root on_select orientation selected shared_editor show_icons icon_size lines_mode on_dclick 1 10 Advanced Trait Editors 81 TraitsUI 4 User Manual Release 4 6 0 dev153 TreeEditor generates a hierarchical tree control consisting of nodes It is useful for cases where objects contain lists of other objects The tree control is displayed in one pane of the editor and a user interface for the selected object is displayed in the other pane The layout orientation of the tree and the object editor is determined by the orientation parameter of TreeEditor which can be horizontal or vertical You must specify the types of nodes that can appear in the tree using the nodes parameter which must be a list of ins
24. creating graphical application using traitsUI However I had to learn a few new concepts and would like to lay them down together in order to make it easier for others to follow my footsteps This document is intended to help a non programmer to use traits and traitsUI to write an interactive graphical applica tion The reader is assumed to have some basic python scripting knowledge see ref for a basic introduction Knowl edge of numpy scipy helps understanding the data processing aspects of the examples but may not be paramount Some examples rely on matplotlib This document is not a replacement for user manuals and references of the different packages traitsUI scipy matplotlib It provides a cookbook approach and not a reference This tutorial provides step by step guide to building a medium size application The example chosen is an application used to do control of a camera analysis of the retrieved data and display of the results This tutorial focuses on building the general structure and flow control of the application and on the aspects specific to traitsUI programming Interfacing with the hardware or processing the data is left aside The tutorial progressively introduces the tools used and in the end presents the skeleton of a real application that has been developed for real time controlling of an experiment monitoring through a camera and processing the data The tutorial goes into more and more intricate detail
25. do not have to implement rotation for the ColoredPoint class as it has been inherited from the Point class This is one of the huge gains of object oriented programming objects are organized in classes and sub classes and method to manipulate objects are derived from the objects parent ship a ColoredPoint is only a special case of Point This proves very handy on large projects Note To stress the differences between classes and their instances objects classes are usually named with capital letters and objects only with lower case letters An object and its representation Objects are code entities that can be easily pictured by the developer The TraitsUI python module allows the user to edit objects attributes with dialogs that form a graphical representation of the object In our example application each process or experimental device is represented in the code as an object These objects all inherit from the HasTraits class which supports creating graphical representations of attributes To be able to build the dialog the HasTraits class enforces that the types of all the attributes are specified in the class definition The HasTraits objects have a configure_traits method that brings up a dialog to edit the objects attributes specified in its class definition 2 1 Writing a graphical application for scientific programming using TraitsUI 4 103 TraitsUI 4 User Manual Release 4 6 0 dev153 Here we define a came
26. do the following 1 Call TreeEditor with the shared_editor parameter set to True without defining any tree nodes The object this call returns defines the shared editor pane For example my_shared_editor_pane TreeEditor shared_editor True 2 For each editor that uses the shared editor pane 88 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 e Set the shared_editor parameter of TreeEditor to True e Set the editor parameter of TreeEditor to the object returned in Step 1 For example shared_tree_1l TreeEditor shared_editor True editor my_shared_editor_pane nodes TreeNode shared_tree_2 TreeEditor shared_editor True editor my_shared_editor_pane nodes TreeNode Defining the Format Several parameters to TreeEditor affect the formatting of the tree control e show_icons If True the default icons are displayed for the nodes in the tree e icon_size A two integer tuple indicating the size of the icons for the nodes e lines_mode Determines whether lines are displayed between related nodes The valid values are on off and appearance the default When set to appearance lines are displayed except on Posix based platforms e hide_root If True the root node in the hierarchy is not displayed If this parameter were specified as True in Example 16 the
27. do_a is finished Even in event loops everything is sequential In some situation this can be very limiting Suppose we want to capture an image from a camera and that it is a very lengthy operation Suppose also that no other operation in our program requires the capture to be complete We would like to have a different timeline in which the camera capture instructions can happen in a sequential way while the rest of the program continues in parallel Threads are the solution to this problem a thread is a portion of a program that can run concurrently with other portions of the program Programming with threads is difficult as instructions are no longer executed in the order they are specified and the output of a program can vary from a run to another depending on subtle timing issues These problems are known as race conditions and to minimize them you should avoid accessing the same objects in different threads Indeed if two different threads are modifying the same object at the same time unexpected things can happen Threads in python In python a thread can be implemented with a Thread object from the threading module To create your own execution thread subclass the Thread object and put the code that you want to run in a separate thread in its run method You can start your thread using its start method code snippet 6 from threading import Thread from time import sleep class MyThread Thread def run sel
28. for Example 16 If you want the user to be able to select instances but not modify their contents set the editable parameter to False In that case only the selection list for the instances appears without the user interface for modifying instances Allowing Instances You can specify what types of instances can be edited in an instance editor using the values parameter This parameter is a list of items describing the type of selectable or editable instances These items must be instances of subclasses of traitsui api InstanceChoiceltem If you want to generate new instances put an InstanceFactoryChoice instance in the values list that describes the instance to create If you want certain types of instances to be dropped on the editor use an InstanceDropChoice instance in the values list ListEditor Suitable for List 1 9 The Predefined Trait Editor Factories 61 TraitsUI 4 User Manual Release 4 6 0 dev153 Default for List Optional parameters editor rows style trait_handler use_notebook The following parameters are used only if use_notebook is True deletable dock_style export page_name select view The editors generated by ListEditor enable the user to modify the contents of a list both by editing the individual items and by adding deleting and reordering items within the list The Merchant of Verice The Merchant of Verice The Merchant of Venice Hamlet MacBeth Fig 1 38 Figure
29. for them as needed To use an alternate editor factory for a trait in a TraitsUI window you must specify it in the View for that window This is done at the Item level using the editor keyword parameter The syntax of the specification is editor editor_factory Use the same syntax for specifying that the default editor should be used but with certain keyword parameters explicitly specified see nitializing Editors For example to display a Str trait called my_string using the default editor factory TextEditor the View might contain the following Item Item name my_string The resulting widget would have the following appearance To use the HTMLEditor factory instead add the appropriate specification to the Item 15 Appendix II contains a table of the predefined trait types in the Traits package and their default trait editor types 38 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Fig 1 13 Figure 13 Default editor for a Str trait Item name my_string editor HTMLEditor The resulting widget appears as in Figure 14 sample string Fig 1 14 Figure 14 Editor generated by HTMLEditor Note TraitsUI does not check editors for appropriateness TraitsUI does not police the editor argument to ensure that the specified editor is appropriate for the trait being dis played Thus there is nothing to prevent you from trying to say displ
30. generates a new blank last row Deleting Items The deletable parameter controls whether items can be deleted from the table This parameter can be a Boolean defaulting to False or a callable the callable must take an item as an argument and handle deleting it If deletable is not False a Delete current item icon E appears on the table toolbar clicking it deletes the item corresponding to the row that is selected in the table Modifying Items The user can modify items in two ways e For columns that are editable the user can change an item s value directly in the table The editor used for each attribute in the table is the simple style of editor for the corresponding trait e Alternatively you can specify a View for editing instances using the edit_view parameter The resulting user interface appears in a subpanel to the right or below the table depending on the orientation parameter You can specify a handler to use with the view using edit_view_handler You can also specify the subpanel s height and width with edit_view_height and edit_view_width Defining the Layout Some of the parameters for the TableEditor factory affect global aspects of the display of the table e auto_size If True the cells of the table automatically adjust to the optimal size based on their contents orientation The layout of the table relative to its associated editor pane Can be horizontal or vertical rows The number of
31. name The text simple and custom styles are all the same They provide a single line of text in which the user can enter the list The readonly style provides a line of text that can not be edited by the user The default separator of items in the list is a comma This can be overridden with the sep keyword parameter Parameters auto_set bool If auto_set is True each key pressed by the user triggers validation of the input and if it is valid the value of the object being edited is updated Default True enter_set bool If enter_set is True the input is updated when the user presses the Enter key Default False sep str or None The separator of the list item in the text field If sep is None each contiguous span of whitespace is a separator Note After the text field is split at the occurrences of sep leading and trailing whitespace is removed from each item before converting to the underlying data type Default a comma ignore_trailing_sep bool If ignore_trailing_sep is True the user may enter a trailing separator e g 1 2 3 and it will be ignored If this is False a trailing separator is an error Default True See Also ListEditor TextEditor DefaultOverride Suitable for any Default for none The DefaultOverride is a factory that takes the trait s default editor and customizes it with the specified parameters This is useful when a trait defines a default editor
32. object dept editor get_parent object print s works in the s department object name dept name Tree editor tree_editor TreeEditor nodes TreeNode node_for Company auto_open True children label name view View Group name orientation vertical show_left True TreeNode node_for Company auto_open True children departments label Departments view no_view add Department TreeNode node_for Company auto_open True children employees 84 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 label Employees view no_view add Employee TreeNode node_for Department auto_open True children employees label name menu Menu NewAction Separator DeleteAction Separator RenameAction Separator CopyAction CutAction PasteAction view View Group name orientation vertical show_left True add Employee TreeNode node_for Employee auto_open True label name menu Menu NewAction Separator def_title_action dept_action Separator CopyAction CutAction PasteAction Separator DeleteAction Separator RenameAction view employee_view The main view view View Group Item name company id company ditor tree_editor resizable True orien
33. of using CustomEditor examine the implementation of the NumericModelExplorer class in the en thought model numeric_model_explorer module CustomEditor is used to generate the plots in the user interface 1 10 2 DropEditor Suitable for Instance traits Default for none Optional parameters binding klass readonly DropEditor generates an editor that is a text field containing a string representation of the trait attribute s value The user can change the value assigned to the attribute by dragging and dropping an object on the text field for example a node from a tree editor See TreeEditor If the readonly parameter is True the default the user cannot modify the value by typing in the text field You can restrict the class of objects that can be dropped on the editor by specifying the klass parameter You can specify that the dropped object must be a binding enthought naming api Binding by setting the binding parameter to True If so the bound object is retrieved and checked to see if it can be assigned to the trait attribute If the dropped object or the bound object associated with it has a method named drop_editor_value it is called to obtain the value to assign to the trait attribute Similarly if the object has a method named drop_editor_update it is called to update the value displayed in the text editor This method requires one parameter which is the GUI control for the text editor 1 10 3 DNDEditor
34. represented by a textbox to display information on the acquisition process The view attribute is tweaked to produce a pleasant and usable dialog Tabs are used to help the display to be light and clear class ControlPanel HasTraits This object is the core of the traitsUI interface Its view is the right panel of the application and it hosts the method for interaction between the objects and the GUI woe experiment Instance Experiment camera Instance Camera figure Instance Figure results Instance Results start_stop_acquisition Button Start Stop acquisition results_string String acquisition_thread Instance AcquisitionThread view View Group Group Item start_stop_acquisition show_label False Item results_string show_label False springy True style custom label Control dock tab Group Group Item experiment style custom show_label False label Input Group Item results style custom show_label False label Results label Experiment dock tab Item camera style custom show_label False dock tab layout tabbed def _start_stop_acquisition_fired self Callback of the start stop acquisition button This starts the acquisition thread or kills it now if self acquisition_thread and self acquisition_thread isAlive self acquisition_thread wants_abort True else self a
35. similar to configure_traits with two major exceptions First it is designed to run from within a larger application whose GUI is already defined Second it does not provide options for saving data to and restoring data from a file as it is assumed that these operations are handled elsewhere in the application 7 Note that although the definition of a View within a HasTraits class has the syntax of a trait attribute definition the resulting View is not stored as an attribute of the class 8 Assuming there is one not all GUIs require an explicitly defined Handler 22 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 ui The View object includes a method called ui which performs the actual generation of the window or panel from the View for both edit_traits and configure_traits The ui method is also available directly through the TraitsUI API however using one of the other two methods is usually preferable The ui method has five keyword parameters e kind e context e handler e parent e view_elements The first four are identical in form and function to the corresponding arguments of edit_traits except that context is not optional the following section explains why The fifth argument view_elements is used only in the context of a call to uid from a model object method i e from configure_traits or edit_traits Therefore it is irrelevant in the rare cases when ui
36. styles for integers 1 9 The Predefined Trait Editor Factories 67 TraitsUI 4 User Manual Release 4 6 0 dev153 Integer Password Simple sample string ee ine string Text sample string ReadOnly sample string Fig 1 46 Figure 46 Text editor styles for strings Integer Password Simple e Custom eerie Text eae ReadOnly tsk Fig 1 47 Figure 47 Text editor styles for passwords 68 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 You can specify whether the trait being edited is updated on every keystroke auto_set True or when the user presses the Enter key enter_set True If auto_set and enter_set are False the trait is updated when the user shifts the input focus to another widget You can specify a mapping from user input values to other values with the mapping parameter You can specify a function to evaluate user input either by passing a reference to it in the evaluate parameter or by passing the extended name of a trait that references it in the evaluate_name parameter TitleEditor Suitable for string traits Default for none TitleEditor generates a read only display of a string value formatted as a heading All styles of the editor are identical Visually it is similar to a Heading item but because it is an editor you can change the text of the heading by modifying the underlying attribute TupleEditor Suitable for Tuple D
37. subclass reformulates a number of trait attributes on its model object as properties on the ModelView usually to convert the model s data into a format that is more suited to a user interface The context dictionary that a ModelView object passes to the View s ui method contains the following entries e object The ModelView object itself e model The ModelView s model object In effect the ModelView object substitutes itself for the model object in relation to the View object serving both the controller role and the model role as a set of properties wrapped around the original model Because the Model View object is passed as the context s object its attributes can be referenced by unqualified names in the View definition 1 6 4 Writing Handler Methods If you create a custom Handler subclass depending on the behavior you want to implement you might override the standard methods of Handler or you might create methods that respond to changes to specific trait attributes Overriding Standard Methods The Handler class provides methods that are automatically executed at certain points in the lifespan of the window controlled by a given Handler By overriding these methods you can implement a variety of custom window behaviors The following sequence shows the points at which the Handler methods are called 1 A Ulinfo object is created 2 The Handler s init_info Q method is called Override this method if the h
38. the Group or View in which it appears For example the following two definitions taken together are equivalent to the third Example 8 Using an Include object This fragment my_view View Group Item a Item b Include my_group plus this fragment my_group Group Item c Item d Item e are equivalent to this my_view View Group Item a Item b Group Item c d e s r tat 1 5 Advanced View Concepts 25 TraitsUI 4 User Manual Release 4 6 0 dev153 This opens an interesting possibility when a View is part of a model class any Include objects belonging to that View can be defined differently for different instances or subclasses of that class This technique is called view parameterization 1 6 Controlling the Interface the Handler Most of the material in the preceding chapters is concerned with the relationship between the model and view aspects of the MVC design pattern as supported by TraitsUI This chapter examines the third aspect the controller implemented in TraitsUI as an instance of the Handler class A controller for an MVC based application is essentially an event handler for GUI events i e for events that are generated through or by the program interface Such events can require changes to one or more model objects e g because a data value has been updated or manipulation of the interface itself e g window closure
39. the images subdirectory or images zip file located in the same directory as the source file containing the string However if the string begins with an at sign the string is assumed to be a reference to an image in the default image library provided with PyFace The item_theme and label_theme attributes are transferred via containment That is if an Item object has an item_theme defined that value is used for the Item object s editor If item_theme is not defined on the Item ob ject the item_theme value from the containing Group is used and so on up to the item_theme value on containing View if necessary Therefore it is possible to set the item and label themes for a whole user interface at the view level The group_theme attribute value is not transferred through containment but nested groups automatically visually inherit the theme of the containing group You can of course explicitly specify theme information at each level of a nested group hierarchy 1 7 3 Adding Themes to a UI To add themes to a Traits user interface you add the theme related attributes to the View Group and Item definitions Example 10 shows the code for the unthemed user interface shown in Figure 8 Example 10 TraitsUI without themes unthemed py Example of a TraitsUI without themes from traits api import HasTraits Str Range Float Enum from traitsui api import View Group Item Label class Test HasTraits na
40. time You can also specify extended references for trait attributes to synchronize with user actions such as the item that is currently selected activated for editing or right clicked Shopping List Title Carrots Potatoes 5 lb bag Cocoa Puffs Ice Cream French Vanilla Peanut Butter Whole wheat bread Ground beef 2 lbs Paper towels Soup 3 cans Laundry detergent Fig 1 41 Figure 41 List string editor NullEditor Suitable for controlling layout Default for none The NullEditor factory generates a completely empty panel It is used by the Spring subclass of Item to generate a blank space that uses all available extra space along its layout orientation You can also use it to create a blank area of a fixed height and width RangeEditor Suitable for Range Default for Range Optional parameters auto_set cols enter_set format high_label high_name label_width low_label low_name mode The editors generated by RangeEditor enable the user to specify numeric values within a range The widgets used to display the range vary depending on both the numeric type and the size of the range as described in Table 8 and shown in Figure 42 If one limit of the range is unspecified then a text editor is used 64 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Table 8 Range editor widgets Data type range size Simple Custom Te
41. using some of its data e g Range or Enum and you want to tweak some of the other parameters without having recreate that data For example the default editor for Range low 0 high 1500 has 1500 as the upper label To change it to Max instead use View Item my_range editor DefaultOverride high_label Max DirectoryEditor Suitable for Directory Default for Directory Optional parameters entries filter filter_name reload_name truncate_ext dclick_name 1 9 The Predefined Trait Editor Factories 51 TraitsUI 4 User Manual Release 4 6 0 dev153 CHsyntenthoughtitrunktenthought traits 3 0 P enthought traits 3 0 D build Custom E docs E enthought Ea enthouaht traits eaoa info Text C svnenthought trunk enthought traits_3 0 ReadOnly C synienthoughttrunkienthought traits 3 0 Fig 1 29 Figure 29 Directory editor styles A directory editor enables the user to display a Directory trait or set it to some directory in the local system hierarchy The four styles of this editor are shown in Figure 29 In the simple style the current value of the trait is displayed in a combo box to the left of a button labeled The user can type a new path directly into the text box select a previous value from the droplist of the combo box or use the button to bring up a directory browser panel similar to the custom style of editor When the user selects a directory
42. view example 19 examples 4 method 22 view parameter 5 21 content attribute Group 10 View 18 context 23 examples 23 View 18 control 6 controller 2 97 Controller built in class 27 D default view 19 20 example 19 default_traits_view default view method 20 defined_when attribute Group 12 Item 6 dialog box 97 dock attribute Group 10 Item 6 View 18 dock_theme attribute 10 drop_class attribute 18 E edit_traits 22 editor 97 editor attribute 6 editor factory 97 emphasized attribute 6 enabled_when attribute Group 12 Item 6 environment variable ETS_TOOLKIT 3 ETS_TOOLKIT 3 ETSConfig toolkit 3 examples buttons 15 configure_traits 4 context 23 default view 19 Include 25 multi object Views 23 multiple Views 21 View object 5 export attribute Group 10 Item 6 View 18 extended trait names Item name attribute 24 extended_traitname_changed 29 127 TraitsUI 4 User Manual Release 4 6 0 dev153 F factory 97 format_func attribute 6 format_str attribute 6 G Group 97 attributes 10 subclasses 12 group_theme attribute 10 H Handler 97 handler attribute 18 Handler class as MVC controller 2 has_focus attribute 6 HasTraits 97 HasTraits class as MVC model 2 Heading class 8 height attribute Item 6 View 18 help attribute Group 12 Item 6 View 18 help_id attribute Group 12 Item 6 View 18 HFlow 13
43. visible rows in the table show_column_labels If True the default displays labels for the columns You can specify the labels to use in the column definitions otherwise a user friendly version of the trait attribute name is used show_toolbar If False the table toolbar is not displayed regardless of whether other settings would normally create a toolbar The default is True Defining the Format The TableEditor factory supports a variety of parameters to control the visual formatting of the table such as colors fonts and sizes for lines cells and labels For details refer to the Traits API Reference trait sui wx table_editor ToolkitEditorFactory attributes You can also specify formatting options for individual table columns when you define them 78 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Other User Interactions The table editor supports additional types of user interaction besides those controlled by the factory parameters e Column dragging The user can reorganize the column layout of a table editor by clicking and dragging a column label to its new location If you have enabled user preferences for the view and table editor by specifying view and item IDs the new column layout is persisted across user sessions e Column resizing The user can resize a column by dragging the column separator in one of the data rows to a new position Because of the column drag
44. wx GROW toolbar NavigationToolbar2Wx mpl_control sizer Add toolbar 0 wx EXPAND self value canvas SetMinSize 10 10 return panel class MPLFigureEditor BasicEditorFactory klass _MPLFigureEditor if name main Create a window to demo the editor from traits api import HasTraits from traitsui api import View Item from numpy import sin cos linspace pi Wu class Test HasTraits figure Instance Figure view View Item figure editor MPLFigureEditor show_label False width 400 height 300 resizable True def init__ self super Test self __init__ axes self figure add_subplot 111 t linspace 0 2 pi 200 axes plot sin t 1 0 5 cos 11 t cos t 1 0 5 cos 11 t Test configure_traits This code first creates a traitsUI editor for a matplotlib figure and then a small dialog to illustrate how it works 112 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 Edit properties L 0 5 of The matplotlib figure traits editor created in the above example can be imported in a traitsUI application and combined with the power of traits This editor allows to insert a matplotlib figure in a traitsUI dialog It can be modified using reactive programming as demonstrated in section 3 of this tutorial However once the dialog is up and running you have to call self figure canvas draw
45. 4 User Manual Release 4 6 0 dev153 1 13 Appendix I Glossary of Terms attribute An element of data that is associated with all instances of a given class and is named at the class level 19 Tn most cases attributes are stored and assigned separately for each instance for the exception see class attribute Synonyms include data member and instance variable class attribute An element of data that is associated with a class and is named at the class level There is only one value for a class attribute associated with the class itself In contrast for an instance attribute there is a value associated with every instance of a class command button A button on a window that globally controls the window Examples include OK Cancel Apply Revert and Help controller The element of the MVC model view controller design pattern that manages the transfer of informa tion between the data model and the view used to observe and edit it dialog box A secondary window whose purpose is for a user to specify additional information when entering a command editor A user interface component for editing the value of a trait attribute Each type of trait has a default editor but you can override this selection with one of a number of editor factories provided by the TraitsUI package In some cases an editor can include multiple widgets e g a slider and a text box for a Range trait attribute editor factory An instance of the
46. A simple way to edit or simply observe the attribute values of a HasTraits object in a GUI window is to call the object s configure_traits method This method constructs and displays a window containing editable fields for each of the object s trait attributes For example the following sample code defines the SimpleEmployee class creates an object of that class and constructs and displays a GUI for the object Example 1 Using configure_traits configure_traits py Sample code to demonstrate configure_traits from traits api import HasTraits Str Int import traitsui class SimpleEmployee HasTraits first_name Str last_name Str department Str mployee_number Str salary Int sam SimpleEmployee sam configure_traits Unfortunately the resulting form simply displays the attributes of the object sam in alphabetical order with little formatting which is seldom what is wanted EJ Edit properties Sel Department Employee number First name Last name Salary Fig 1 1 Figure 1 User interface for Example 1 3 Tf the code is being run from a program that already has a GUI defined then use edit_traits instead of configure_traits These methods are discussed in more detail in Displaying a View 4 All code examples in this guide that include a file name are also available as examples in the tutorials doc_examples examples subdirectory of the Traits docs dir
47. Fy Edit prop AEA First name Last name Department OK Cancel Fig 1 4 Figure 4 User interface for Example 4 There are six standard buttons defined by TraitsUI Each of the standard buttons has matching a string alias You can either import and use the button names or simply use their aliases 6 Actually the value of the buttons attribute is really a list of Action objects from which GUI buttons are generated by TraitsUI The Action class is described in Actions 1 4 Customizing a View 15 TraitsUI 4 User Manual Release 4 6 0 dev153 Command button aliases Button Name Button Alias UndoButton Undo ApplyButton Apply RevertButton Revert OKButton OR case sensitive CancelButton Cancel Alternatively there are several pre defined button lists that can be imported from traitsui menu and assigned to the buttons attribute e OKCancelButtons OKButton CancelButton e ModalButtons ApplyButton RevertButton OKButton CancelButton HelpButton e LiveButtons UndoButton RevertButton OKButton CancelButton HelpButton Thus one could rewrite the lines in Example 4 as follows and the effect would be exactly the same from traitsui menu import OKCancelButtons buttons OKCancelButtons The special constant NoButtons can be used to create a window or panel without command buttons While this is the default behavi
48. HSplit Item figure editor MPLFigureEditor dock vertical Item panel style custom show_labels False A resizable True height 0 75 width 0 75 handler MainWindowHandler buttons NoButtons if name _ main ns MainWindow configure_traits When the acquisition loop is created and running the mock camera object produces noisy gaussian images and the processing code estimates the parameters of the gaussian Here are screenshots of the three different tabs of the application 2 1 Writing a graphical application for scientific programming using TraitsUI 4 117 Eins nnn TraitsUI 4 User Manual Release 4 6 0 dev153 ES Edit properes Edit propernes Edit properes av gt 4 Control Experiment Camera Start Stop acquisition Camera stopped 3 image captured 2 image captured 1 image captured Camera started Control Experiment Camera Width 30 0 x 50 0 Y 50 0 Width 27 5520129427 X 48 7585462131 Y 51 1108380861 Control Experiment Camera Exposure 1 0 Gain 1 s 118 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 Conclusion I have summarized here all what most scientists need to learn in order to be able to start building applications with traitsUI Using the traitsUI module to its f
49. Lyn 40 555 4444 Greg 45 555 5555 aw Phone Results All S tems Gabe Name Jason Age 32 Phone 555 1111 Fig 1 51 Figure 51 Table editor To see the code that results in Figure 51 refer to Table Editor_demo py in the demos TraitsUI Demo Standard Editors subdirectory of the Traits UI package This example demonstrates object columns expression columns filters searching and adding and deleting rows The parameters for TableEditor can be grouped in several broad categories described in the following sections e Specifying Columns e Managing Items e Editing the Table Defining the Layout Defining the Format Other User Interactions 74 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Specifying Columns You must provide the TableEditor factory with a list of columns for the table You can specify this list directly as the value of the columns parameter or indirectly in an extended context attribute referenced by the columns_name parameter The items in the list must be instances of traitsui api TableColumn or of a subclass of TableColumn Some subclasses of TableColumn that are provided by the TraitsUI package include ObjectColumn ListColumn NumericColumn and ExpressionColumn See the Traits API Reference for details about these classes In practice most columns are derived from one of these subclasses rather than from Tabl
50. Str Int from traitsui api import View Item Group import traitsui class SimpleEmployee HasTraits first_name Str last_name Str department Str mployee_number Str salary Int viewl View Group Item name first_name Item name last_name Item name department label Personnel profile show_border True sam SimpleEmployee sam configure_traits view view1 The resulting window shows the same widgets as before but they are now enclosed in a visible border with a text label 1 3 The View and Its Building Blocks 9 TraitsUI 4 User Manual Release 4 6 0 dev153 EY edit proper PE Personnel profile First name Last name Department Fig 1 3 Figure 3 User interface for Example 3 Content of a Group The content of a Group object is specified exactly like that of a View object In other words one or more Item or Group objects are given as arguments to the Group constructor e g the three Items in Example 3 The objects contained in a Group are called the elements of that Group Groups can be nested to any level Group Attributes The following table lists the attributes of the Group class organized by functional categories As with Item attributes many of these attributes can be left unspecified for any given Group as the default values usually lead to acceptable displays and behavior See the Traits API Reference for details of the Gr
51. Suitable for Instance traits Default for none Optional parameters drag_target drop_target image DNDEditor generates an editor that represents a file or a HasTraits instance as an image that supports dragging and dropping Depending on the editor style the editor can be a drag source the user can set the value of the trait attribute by dragging a file or object onto the editor for example from a tree editor or drop target the user can drag from the editor onto another target 1 10 Advanced Trait Editors 71 TraitsUI 4 User Manual Release 4 6 0 dev153 Table 9 Drag and drop editor style variations Editor Style Drag Source Drop Target Simple Yes Yes Custom No Yes Read only Yes No 1 10 4 KeyBindingEditor The KeyBindingEditor factory differs from other trait editor factories because it generates an editor not for a single attribute but for an object of a particular class traitsui key_bindings KeyBindings A KeyBindings object is a list of bindings between key codes and handler methods You can specify a KeyBindings object as an attribute of a View When the user presses a key while a View has input focus the user interface searches the View for a KeyBindings that contains a binding that corresponds to the key press if such a binding does not exist on the View it searches enclosing Views in order and uses the first matching binding if any If it does not find any matching bindings i
52. TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 The editors generated by the CheckListEditor factory are designed to enable the user to edit a List trait by selecting elements from a master list i e a list of possible values The list of values can be supplied by the trait being edited or by the values parameter The values parameter can take either of two forms e A list of strings e A list of tuples of the form element label where element can be of any type and label is a string In the latter case the user selects from the labels but the underlying trait is a List of the corresponding element values Alternatively you can use the name parameter to specify a trait attribute containing the label strings for the values The custom style of editor from this factory is displayed as a set of checkboxes By default these checkboxes are displayed in a single column however you can initialize the cols parameter of the editor factory to any value between 1 and 20 in which case the corresponding number of columns is used The simple style generated by CheckListEditor appears as a drop down list in this style only one list element can be selected so it returns a list with a single item The text and read only styles represent the current contents of the attribute in Python style text format in these cases the user cannot see the master list values that have not been selected The four styles generated b
53. ad view View Item start_stop_capture show_label False def _start_stop_capture_fired self if self capture_thread and self capture_thread isAlive self capture_thread wants_abort True else self capture_thread CaptureThread self capture_thread wants_abort False self capture_thread display self display self capture_thread start class MainWindow HasTraits display Instance TextDisplay camera Instance Camera def _camera_default self return Camera display self display view View display camera style custom resizable True if name _ main MainWindow configure_traits This creates an application with a button that starts or stop a continuous camera acquisition loop FY Edit properes eales Camera stopped 3 image captured Display 2 image captured 1 image captured started b Camera Start stop capture When the Start stop capture button is pressed the _start_stop_capture_fired method is called It checks to see if a CaptureThread is running or not If none is running it starts a new one If one is running it sets its wants_abort attribute to true The thread checks every half a second to see if its attribute wants_abort has been set to true If this is the case it aborts This is a simple way of ending the thread through a GUI event Using different threads lets the operations avoid blocking the user interface while
54. aits_view Otherwise TraitsUI gives preference to none of them and instead tries to construct a default View resulting in a simple alphabetized display as described in The View and Its Building Blocks For this 1 5 Advanced View Concepts 21 TraitsUI 4 User Manual Release 4 6 0 dev153 reason it is usually preferable to name a model s default View traits_view even if there are no other Views otherwise simply defining additional Views even if they are never used can unexpectedly change the behavior of the GUI 1 5 2 Separating Model and View External Views In all the preceding examples in this guide the concepts of model and view have remained closely coupled In some cases the view has been defined in the model class as in nternal Views in other cases the configure_traits method that produces a window from a View has been called from a HasTraits object However these strategies are simply conveniences they are not an intrinsic part of the relationship between model and view in TraitsUI This section begins to explore how the TraitsUI package truly supports the separation of model and view prescribed by the MVC design pattern An external view is one that is defined outside the model classes In Traits UI you can define a named View wherever you can define a variable or class attribute A View can even be defined in line as a function or method argument for example object configure_traits view View Group It
55. all any particular GUI toolkit code unless they need some capability of the toolkit that is not provided by TraitsUI However some particular toolkit must be installed on the system in order to actually display GUI windows TraitsUI uses a separate package traits etsconfig to determine which GUI toolkit to use This package is also used by other Enthought packages that need GUI capabilities so that all such packages agree on a single GUI toolkit per application The etsconfig package contains a singleton object ETSConfig importable from traits etsconfig api which has a string attribute toolkit that signifies the GUI toolkit The values of ETSConfig toolkit that are supported by TraitsUI version 4 are wx wxPython which provides Python bindings for the wx Widgets toolkit qt4 PyQt which provides Python bindings for the Qt framework version 4 null A do nothing toolkit for situations where neither of the other toolkits is installed but Traits is needed for non UI purposes The default behavior of TraitsUI is to search for available toolkit specific packages in the order listed and uses the first one it finds The programmer or the user can override this behavior in any of several ways in the following order of precedence 1 The program can explicitly set ETSConfig toolkit It must do this before importing from any other Enthought Tool Suite component including traits For example at the beginning of a pr
56. alled whenever the price of the second house is edited Note These methods are called on window creation User interface notification methods are called when the window is first created To differentiate between code that should be executed when the window is first initialized and code that should be executed when the trait actually changes use the initialized attribute of the UIInfo object i e of the info argument def object_foo_changed self info if not info initialized code to be executed only when the window is created else code to b xecuted only when window initialization foo changes after 1 6 Controlling the Interface the Handler 29 TraitsUI 4 User Manual Release 4 6 0 dev153 code to b xecuted in either cas The following script which annotates its window s title with an asterisk the first time a data element is updated demonstrates a simple use of both an overridden setattr method and user interface notification method Example 9 Using a Handler that reacts to trait changes handler_override py Example of a Handler that overrides setattr and that has a user interface i notification method from traits api import HasTraits Bool from traitsui api import View Handler class TC_Handler Handler def setattr self info object name value Handler setattr self info object name value info object _updated True def ob
57. and methods Suppose you want your program to manipulate geometric objects You can teach the computer that a point is a set of 3 numbers you can teach it how to rotate that point along a given axis Now you want to use spheres too With a bit more work your program has functions to create points spheres etc It knows how to rotate them to mirror them to scale them So in pure procedural programming you will have procedures to rotate scale mirror each one of your objects If you want to rotate an object you will first have to find its type then apply the right procedure to rotate it Object oriented programming introduces a new abstraction the object It consists of both data our 3 numbers in the case of a point and procedures that use and modify this data e g rotations The data entries are called attributes of the object and the procedures methods Thus with object oriented programming an object knows how to be rotated A point object could be implemented in python with code snippet 0 from numpy import cos sin class Point object mi 3D Point objects Ton x 0 y 0 z 0 def rotate_z self theta rotate the point around the Z axis noon 102 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 xtemp cos theta self x sin theta self y ytemp sin theta self x cos theta self y self x xtemp self y ytemp
58. andler needs access to viewable traits on the UIInfo object whose values are properties that depend on items in the context being edited 3 The UI object is created and generates the actual window 4 The init method is called Override this method if you need to initialize or customize the window 5 The position method is called Override this method to modify the position of the window if setting the x and y attributes of the View is insufficient 6 The window is displayed 28 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 When Handler methods are called and when to override them Method Called When Override When apply info The user clicks the Apply button and To perform additional processing at this point after the changes have been applied to the context objects close info The user requests to close the window To perform additional checks before destroying the is_ok clicking OK Cancel or the window close window button menu or icon closed info The window has been destroyed To perform additional clean up tasks is_ok revert info The user clicks the Revert button or To perform additional processing clicks Cancel in a live window setattr info The user changes a trait attribute value To perform additional processing such as keeping a object through the user interface change history Make sure that the overriding name value method actua
59. are controlled by means of the Item object s attributes which are usually specified as keyword arguments to the Item constructor as in the case of name in Example 2 The remainder of this section describes the attributes of the Item object grouped by categories of functionality It is not necessary to understand all of these attributes in order to create useful Items many of them can usually be left unspecified as their default values are adequate for most purposes Indeed as demonstrated by earlier examples simply specifying the name of the trait attribute to be displayed is often enough to produce a usable result The following table lists the attributes of the Item class organized by functional categories Refer to the Traits API Reference for details on the Item class 6 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 3 The View and Its Building Blocks 7 TraitsUI 4 User Manual Release 4 6 0 dev153 Attributes of Item by category Category Attributes Description Content name These attributes specify the actual data to be displayed by an item Be cause an Item is essentially a tem plate for displaying a single trait its name attribute is nearly always spec ified Display format In addition to specifying which trait format_func Bok attributes are to be displayed you pmphanzed might need to adjust the format of one epon or more of the
60. ars in the table toolbar containing the filters that are available for the user to apply When the user selects a filter it is automatically applied to the table A status message to the right of the filters list indicates what subset of the items in the table is currently displayed A special item in the filter list named Customize is always provided clicking this item opens a dialog box that enables the user to create new filters or to edit or delete existing filters except templates You can also provide an option for the user to use filters to search the table If you set the search parameter to an instance of TableFilter or of a subclass a Search table icon nes appears on the table toolbar Clicking this icon 76 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 opens a Search for dialog box which enables the user to specify filter criteria to browse through matching items or select all matching items Interacting with Items As the user clicks in the table you may wish to enable certain program behavior The value of the selection_mode parameter specifies how the user can make selections in the grid e cell A single cell at a time e cells Multiple cells e column A single column at a time e columns Multiple columns e row A single row at a time e rows Multiple rows You can use the selected parameter to specify the name of a trait attribute in the current context t
61. as for defining Views within HasTraits objects for example a view named trait_view is used as the default view The Handler class which is a subclass of HasTraits overrides the standard configure_traits and edit_traits methods the subclass versions are identical to the originals except that the Handler object on which they are called becomes the default Handler for the resulting windows Note that for these versions of the display methods the context keyword parameter is not optional 1 6 3 Handler Subclasses TraitsUI provides two Handler subclasses Model View and Controller Both of these classes are designed to simplify the process of creating an MVC based application Both Model View and Controller extend the Handler class by adding the following trait attributes e model The model object for which this handler defines a view and controller e info The UIInfo object associated with the actual user interface window or panel for the model object The model attribute provides convenient access to the model object associated with either subclass Normally the model attribute is set in the constructor when an instance of ModelView or Controller is created The info attribute provides convenient access to the UIInfo object associated with the active user interface view for the handler object The info attribute is automatically set when the handler object s view is created Both classes constructors accept an optional model para
62. ation vertical exceed the available vertical space layout flow show_labels False VFold A vertical group in which items can be collapsed Group orientation vertical i e folded by clicking their titles layout fold show_labels False VGrid A vertical group whose items are laid out in two Group orientation vertical columns columns 2 VS A vertical group with splitter bars to separate it Group orientation vertical plit from other groups layout split 1 4 Customizing a View As shown in the preceding two chapters it is possible to specify a window in TraitsUI simply by creating a View object with the appropriate contents In designing real life applications however you usually need to be able to control the appearance and behavior of the windows themselves not merely their content This chapter covers a variety of options for tailoring the appearance of a window that is created using a View including the type of window that a View appears in the command buttons that appear in the window and the physical properties of the window 1 4 1 Specifying Window Type the kind Attribute Many types of windows can be used to display the same data content A form can appear in a window a wizard or an embedded panel windows can be modal i e stop all other program processing until the box is dismissed or not and can interact with live data or with a buffered copy In TraitsUI a
63. ay a Float trait using ColorEditor The results of such a mismatch are unlikely to be helpful and can even crash the application it is up to the programmer to choose an editor sensibly The Predefined Trait Editor Factories is a useful reference for selecting an appropriate editor for a given task It is possible to specify the trait editor for a trait in other ways e You can specify a trait editor when you define a trait by passing the result of a trait editor factory as the editor keyword parameter of the callable that creates the trait However this approach commingles the view of a trait with its model e You can specify the editor attribute of a TraitHandler object This approach commingles the view of a trait with its controller Use these approaches very carefully if at all as they muddle the MVC design pattern Initializing Editors Many of the TraitsUI trait editors can be used straight from the box as in the example above There are some editors however that must be initialized in order to be useful For example a checklist editor from CheckListEditor and a set editor from SetEditor both enable the user to edit a List attribute by selecting elements from a specified set the contents of this set must of course be known to the editor This sort of initialization is usually performed by means of one or more keyword arguments to the editor factory for example Item name my_list editor CheckListEdi
64. bility and power of the tabular editor to display a wide variety of data The most important attribute of TabularAdapter is columns which is list of columns to be displayed Each entry in the columns list can be either a string or a tuple consisting of a string and another value which can be of any type The string is used as the label for the column The second value in the tuple called the column ID identifies the column to the adapter It is typically a trait attribute name or an integer index but it can be any value appropriate to the adapter If only a string is specified for an entry then the index of the entry within the columns list is used as that entry s column ID Attributes on TabularAdapter control the appearance of items and aspects of interaction with items such as whether they can be edited and how they respond to dragging and dropping Setting any of these attributes on the adapter subclass sets the global behavior for the editor Refer to the Traits API Reference for details of the available attributes You can also specify these attributes for a specific class or column ID or combination of class and column ID When the TabularAdapter needs to look up the value of one of its attributes for a specific item in the table it looks for attributes with the following naming conventions in the following order 1 classname_columnid_attribute 2 classname_attribute 3 columnid_attribute 4 attribute For example to find th
65. click parameters are callables to invoke when the user selects or double clicks an item respec tively You can define a shortcut menu that opens when the user right clicks an item Use the menu parameter to specify a TraitsUI or PyFace Menu containing Action objects for the menu commands Editing the Table The Boolean editable parameter controls whether the table or its items can be modified in any way This parameter defaults to True except when the style is readonly Even when the table as a whole is editable you can control whether individual columns are editable through the editable attribute of TableColumn 1 10 Advanced Trait Editors 77 TraitsUI 4 User Manual Release 4 6 0 dev153 Adding Items To enable users to add items to the table specify as the row_factory parameter a callable that generates an object that can be added to the list in the table for example the class of the objects in the table When row_factory is specified an Insert new item icon ES appears in the table toolbar which generates a new row in the table Optionally you can use row_factory_args and row_factory_kw to specify positional and keyword arguments to the row factory callable To save users the trouble of mousing to the toolbar you can enable them to add an item by selecting the last row in the table To do this set auto_add to True In this case the last row is blank until the user sets values Pressing Enter creates the new item and
66. cquisition_thread AcquisitionThread self acquisition_thread display self add_line self acquisition_thread acquire self camera acquire self acquisition_thread experiment self experiment self acquisition_thread image_show self image_show self acquisition_thread results self results self acquisition_thread start def add_line self string Adds a line to the textbox display oon 116 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 self results_string string n self results_string 0 1000 def image_show self image Plots an image on the canvas in a thread safe way noe self figure axes 0 images self figure axes 0 imshow image aspect auto wx CallAfter self figure canvas draw class MainWindowHandler Handler def close self info is_OK if info object panel acquisition_thread and info object panel acquisition_thread isAlive info object panel acquisition_thread wants_abort True while info object panel acquisition_thread isAlive sleep 0 1 wx Yield return True class MainWindow HasTraits vu The main window here go the instructions to create and destroy the applica figure Instance Figure panel Instance ControlPanel def _figure_default self figure Figure figure add_axes 0 05 0 04 0 9 0 92 return figure def _panel_default self return ControlPanel figure self figure view View
67. ction instance_editor_selection py Example of an instance editor with instance selection from traits api import HasStrictTraits Int Instance List Regex Str from traitsui api import View Item InstanceEditor class Person HasStrictTraits name Str age Int phone Regex value 000 0000 regex d d d d d d d traits_view View name age phone people Person name Dave age 39 phone 555 1212 Person name Mike age 28 phone 555 3526 Person name Joe age 34 phone 555 6943 Person name Tom age 22 phone 555 7586 Person name Dick age 63 phone 555 3895 Person name Harry age 46 phone 555 3285 Person name Sally age 43 phone 555 8797 Person name Fields age 31 phone 555 3547 class Team HasStrictTraits name Str captain Instance Person roster List Person traits_view View Item name 60 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Item _ Item captain label Team Captain editor InstanceEditor name roster ditable True style custom buttons OK iE name _ main ra Team name Vultures captain people 0 roster people configure_traits Team Captain 555 1212 ok Fig 1 37 Figure 37 User interface
68. ctoryEditor Enum EnumEditor ImageEnumEditor Event none ButtonEditor ToolbarButtonEditor File FileEditor AnimatedGIFEditor Float TextEditor LEDEditor Font FontEditor HTML HTMLEditor Instance InstanceEditor TreeEditor DropEditor DNDEditor List TableEditor for lists of HasTraits objects ListEditor for all other lists CSVListEditor CheckListEditor Set Long TextEditor LEDEditor Password TextEditor password True Python Value ShellEditor Range RangeEditor ThemedSliderEditor Regex TextEditor CodeEditor RGBColor RGBColorEditor Str TextEditor multi_line True CodeEditor HTMLEditor String TextEditor CodeEditor ThemedTextEditor This InstanceEditor ToolbarButton ButtonEditor Tuple TupleEditor UIDebugger ButtonEditor button calls the UIDebugEditor factory Unicode TextEditor multi_line True HTMLEditor WeakRef InstanceEditor 1 14 Appendix II Editor Factories for Predefined Traits 99 TraitsUI 4 User Manual Release 4 6 0 dev153 100 Chapter 1 TraitsUI 4 User Manual CHAPTER 2 TraitsUI 4 Tutorials 2 1 Writing a graphical application for scientific programming using TraitsUI 4 A step by step guide for a non programmer Author Gael Varoquaux Date 2015 08 18 License BSD Building interactive Graphical User Interfaces GUIs is a hard problem especially for somebody who has not had training in IT TraitsUI is a python module that provides a great answer to this problem I have found that I am incredibly productive when
69. d attribute is ignored by the default help handler but can be used by a custom help han dler Unique identifier The id attribute is used as a key 8 Cc gt Rint Taigi 4 se Manpah value of the name attribute is used TraitsUI 4 User Manual Release 4 6 0 dev153 Subclasses of Item The TraitsUI package defines the following subclasses of Item e Label e Heading e Spring These classes are intended to help with the layout of a TraitsUI View and need not have a trait attribute associated with them See the Traits API Reference for details The Group Object The preceding sections have shown how to construct windows that display a simple vertical sequence of widgets using instances of the View and Item classes For more sophisticated interfaces though it is often desirable to treat a group of data elements as a unit for reasons that might be visual e g placing the widgets within a labeled border or logical activating or deactivating the widgets in response to a single condition defining group level help text In TraitsUI such grouping is accomplished by means of the Group object Consider the following enhancement to Example 2 pair configure_traits examples triple View Group examples Example 3 Using configure_traits with a View and a Group object configure_traits_view_group py Sample code to demonstrate configure_traits from traits api import HasTraits
70. displays the trait value as one would expect as the strings True or False However several variations are accepted as input e True e T e Yes e False F e No en The set of acceptable text inputs can be changed by setting the BooleanEditor parameter mapping to a dictionary whose entries are of the form str val where val is either True or False and str is a string that is acceptable as text input in place of that value For example to create a Boolean editor that accepts only yes and no as appropriate text values you might use the following expression editor BooleanEditor mapping yes True no False Note that in this case the strings True and False would not be acceptable as text input Figure 22 shows the four styles generated by BooleanEditor ButtonEditor Suitable for Button Event ToolbarButton Default for Button ToolbarButton 1 9 The Predefined Trait Editor Factories 45 TraitsUI 4 User Manual Release 4 6 0 dev153 Simple V Custom V Text True ReadOnly True Fig 1 22 Figure 22 Boolean editor styles Optional parameters height_padding image label label_value orientation style value values_trait view width_padding The ButtonEditor factory is designed to be used with an Event or Button trait When a user clicks a button editor the associated event is fired Because events are not printable objects the text and read only styles are not
71. dows The label parameter specifies a label for the button in the simple interface The view parameter specifies a view to use for the referenced instance s user interface if this is not specified the default view for the instance is used see Defining a Default View The text and read only styles display the string representation of the instance They therefore cannot be used to modify the attributes of the instance A user could modify the assigned instance if they happened to know the memory address of another instance of the same type which is unlikely These styles can useful for prototyping and debugging but not for real applications Selecting Instances You can add an option to select a different instance to edit Use the name parameter to specify the extended name of a trait attribute in the context that contains a list of instances that can be selected or edited See The View Context for an explanation of contexts Using these parameters results in a drop drown list box containing a list of text representations of the available instances If the instances have a name trait attribute it is used for the string in the list otherwise a user friendly version of the class name is used For example the following code defines a Team class and a Person class A Team has a roster of Persons and a captain In the view for a team the user can pick a captain and edit that person s information Example 16 Instance editor with instance sele
72. dress 4743 Dudley Lane bedrooms 3 pool False price 150000 house2 House address 11604 Autumn Ridge bedrooms 3 pool True price 200000 And the actual display command housel configure_traits view comp_view context hl housel h2 house2 The resulting window has the desired appearance For the purposes of this particular example it makes sense to create a separate Group for each model object and to use two model objects of the same class Note however that neither is a requirement Notice that the Item definitions in Example 7 use the same type of extended trait attribute syntax as is supported for the on_trait_change dynamic trait change notification method In fact Item name attributes can reference any trait 10 Tf the script were designed to run within an existing GUI it would make sense to replace the last line with comp_view ui context hl1 housel h2 house2 since neither object particularly dominates the view How ever the examples in this Manual are designed to be fully executable from the Python command line which is why configure_traits was used instead 24 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 EJ House Com parison TER Address utimsem Sila RENE Address 11604 Autumn Ridg Bedrooms E Bedrooms f Pool Pool iv Price 1150000 Price 200000 Fig 1 6 Figure 6 User interface for Example 7
73. e pickle viewer utility in enthought debug Dicti page_layout Dict 13 bottom Dicki sash_position 391 cH size Tuplet2 0 792 1 300 EP view _visibility Dict 1 Wd Centhought envisage ui python_shell view Pythonshellview True cP window position Tuplel 0 58 i 116 cH Cwindow size Tuplefe 0 soo 1 600 Fig 1 49 Figure 49 Value editor from Pickle Viewer 1 10 Advanced Trait Editors The editor factories described in the following sections are more advanced than those in the previous section In some cases they require writing additional code in others the editors they generate are intended for use in complex user interfaces in conjunction with other editors 1 10 1 CustomEditor Suitable for Special cases 70 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Default for none Required parameters factory Optional parameters args Use CustomEditor to create an editor that is a non Traits based custom control The factory parameter must be a function that generates the custom control The function must have the following signature factory_function window_parent editor args kwargs e window_parent The parent window for the control e editor The editor object created by CustomEditor Additional arguments if any can be passed as a tuple in the args parameter of CustomEditor For an example
74. e Fruit Fruit Bowl D gt gt apples lt lt Move Down HE EEL Fig 1 43 Figure 43 Set editor showing all possible buttons You can specify the set of candidate items in either of two ways e Set the values parameter to a list tuple dictionary or mapped trait e Set the name parameter to the extended name of a trait attribute that contains the list 66 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 ShellEditor Suitable for special Default for PythonValue The editor generated by ShellEditor displays an interactive Python shell T Python 2 4 3 Enthought Edition 1 1 0 69 Oct 5 2006 14 56 53 MSC v 1310 32 bit Intel on win32 Type help copyright credits or license for more information 3 gt gt gt Fig 1 44 Figure 44 Python shell editor TextEditor Suitable for all Default for Str String Password Unicode Int Float Dict CStr CUnicode and any trait that does not have a specialized TraitHandler Optional parameters auto_set enter_set evaluate evaluate_name mapping multi_line password The editor generated by TextEditor displays a text box For the custom style it is a multi line field for the read only style it is static text If password is True the text that the user types in the text box is obscured Integer Password Simple ii Custom j Text fi ReadOnly 1 Fig 1 45 Figure 45 Text editor
75. e one corresponding to the camera we want to control and one describing the experiment that the camera monitors We do not want to have to open a new dialog per object this would force us to describe the GUI in terms of graphical objects and not structural objects We want the GUI to be a natural representation of our objects and we want the Traits module to take care of that 5 ctypes http starship python net crew theller ctypes 104 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 The solution is to create a container object that has as attributes the objects we want to represent Playing with the View attribute of the object we can control how the representation generated by Traits looks like see the TraitsUI manual code snippet 2 from traits api import x from traitsui api import x class Camera HasTraits gain Enum 1 2 3 exposure CInt 10 label Exposure class TextDisplay HasTraits string String view View Item string show_label False springy True style custom class Container HasTraits camera Instance Camera display Instance TextDisplay view View Item camera style custom show_label False Item display style custom show_label False container Container camera Camera display TextDisplay container configure_traits The call to configure_traits creates the following dialog wit
76. e text_color value for an item whose class is Person and whose column ID is age the get_text_color method looks for the following attributes in sequence and returns the first value it finds 1 Person_age_text_color 2 Person_text_color 3 age_text_color 4 text_color Note that the classname can be the name of a base class searched in the method resolution order MRO for the item s class So for example if the item were a direct instance of Employee which is a subclass of Person then the Person_age_text_color attribute would apply to that item as long as there were no Employee_age_text_color attribute The Tabular Editor User Interface Figure 53 shows an example of a tabular editor on Microsoft Windows displaying information about source files in the Traits package This example includes a column that contains an image for files that meet certain conditions 80 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Steere ____ _sge _ _______te ____bate adapter py 7830 0871372007 api py 5794 DEES on 11 16 2007 category py 4757 04 08 06 PM 08 13 2007 core_traits py 3758 04 08 06 PM 0871372007 has_dynanic_vievs py 15556 04 08 06 PM 0871372007 has_traits py 146863 03 29 33 PM 1172872007 standard py 13715 04 08 06 PM 0871372007 traits py 55643 05 37 52 PM 1171672007 traits_listener py 39379 03 29 33 PM 1172872007 trait_base py 15628 12 10 01 PM 1170972007 trait_db py 22879 04
77. e window False The default value of this parameter is True ColorEditor Suitable for Color Default for Color Optional parameters mapped The editors generated by ColorEditor are designed to enable the user to display a Color trait or edit it by selecting a color from the palette available in the underlying GUI toolkit The four styles of color editor are shown in Figure 26 In the simple style the editor appears as a text box whose background is a sample of the currently selected color The text in the box is either a color name or a tuple of the form r g b where r g and b are the numeric values of the red green and blue color components respectively Which representation is used depends on how the value was entered The text value is not directly editable in this style of editor instead clicking on the text box displays a pop up panel similar in appearance and function to the custom style The custom style includes a labeled color swatch on the left representing the current value of the Color trait and a palette of common color choices on the right Clicking on any tile of the palette changes the color selection causing the swatch to update accordingly Clicking on the swatch itself causes a more detailed platform specific interface to appear in a dialog box such as is shown in Figure 27 The text style of editor looks exactly like the simple style but the text box is editable and clicking on it does not open a pop up pa
78. eColumn For the usual case of editing trait attributes on objects in the list use ObjectColumn You must specify the name parameter to the ObjectColumn constructor referencing the name of the trait attribute to be edited You can specify additional columns that are not initially displayed using the other_columns parameter If the config urable parameter is True the default a Set user preferences for table icon ed appears on the table s toolbar When the user clicks this icon a dialog box opens that enables the user to select and order the columns displayed in the table as shown in Figure 52 The dialog box is implemented using a set editor see SetEditor Any columns that were specified in the other_columns parameter are listed in the left list box of this dialog box and can be displayed by moving them into the right list box a Select and Order Columns Sa gt Phone Move Down Und OK Cancel Fig 1 52 Figure 52 Column selection dialog box for a table editor Managing Items Table editors support several mechanisms to help users locate items of interest 1 10 Advanced Trait Editors 75 TraitsUI 4 User Manual Release 4 6 0 dev153 Organizing Items Table editors provide two mechanisms for the user to organize the contents of a table sorting and reordering The user can sort the items based on the values in a column or the user can manually order the items Usually only one of these mecha
79. ectory You can run them individually or view them in a tutorial program by running python Traits_dir tutorials tutor py Traits_dir docs tutorials doc_examples 4 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 3 1 The View Object In order to control the layout of the interface it is necessary to define a View object A View object is a template for a GUI window or panel In other words a View specifies the content and appearance of a TraitsUI window or panel display For example suppose you want to construct a GUI window that shows only the first three attributes of a SimpleEm ployee e g because salary is confidential and the employee number should not be edited Furthermore you would like to specify the order in which those fields appear You can do this by defining a View object and passing it to the configure_traits method Example 2 Using configure_traits with a View object configure_traits_view py Sample code to demonstrate configure_traits from traits api import HasTraits Str Int from traitsui api import View Item import traitsui class SimpleEmployee HasTraits first_name Str last_name Str department Str mployee_number Str salary Int viewl View Item name first_name Item name last_name Item name department sam SimpleEmployee sam configure_traits view view1 The resulting window has the d
80. efault for Tuple Optional parameters cols editors labels traits The simple and custom editors generated by TupleEditor provide a widget for each slot of the tuple being edited based on the type of data in the slot The text and read only editors edit or display the text representation of the tuple Simple 1 H 41 ae Custom 1 4 1 a Text jw Colour O 192 255 255 1 ReadOnly wx Colourf0 192 255 2553 1 9 Fig 1 48 Figure 48 Tuple editor styles 1 9 The Predefined Trait Editor Factories 69 TraitsUI 4 User Manual Release 4 6 0 dev153 You can specify the number of columns to use to lay out the widgets with the cols parameter You can specify labels for the widgets with the labels parameter You can also specify trait definitions for the slots of the tuple however this is usually implicit in the tuple being edited You can supply a list of editors to be used for each corresponding tuple slot If the editors list is missing or is shorter than the length of the tuple default editors are used for any tuple slots not defined in the list This feature allows you to substitute editors or to supply non default parameters for editors ValueEditor Suitable for any Default for none Optional parameters auto_open ValueEditor generates a tree editor that displays Python values and objects including all the objects members For example Figure 49 shows a value editor that is displayed by th
81. eleted delete_me object deleted rename object s children renamed rename_me object renamed All of these attributes default to True As with add you must also define actions to perform these operations Behavior on Nodes As the user clicks in the tree you may wish to enable certain program behavior You can use the selected parameter to specify the name of a trait attribute on the current context object to synchronize with the user s current selection For example you can enable or disable menu items or toolbar icons depending on which node is selected The synchronization is two way you can set the attribute referenced by selected to force the tree to select a particular node The on_select and on_dclick parameters are callables to invoke when the user selects or double clicks a node respec tively Expanding and Collapsing Nodes You can control some aspects of expanding and collapsing of nodes in the tree The integer auto_open parameter of TreeEditor determines how many levels are expanded below the root node when the tree is first displayed For example if auto_open is 2 then two levels below the root node are displayed whether or not the root node itself is displayed which is determined by hide_root The Boolean auto_open attribute of TreeNode determines whether nodes of that type are expanded when they are displayed at any time not just on initial display of the tree For example suppose that
82. em name a Item name b Item name c However this approach is apt to obfuscate the code unless the View is very simple Example 2 through Example 4 demonstrate external Views defined as variables One advantage of this convention is that the variable name provides an easily accessible handle for re using the View This technique does not however support visual inheritance A powerful alternative is to define a View within the controller Handler class that controls the window for that View 8 This technique is described in Controlling the Interface the Handler 1 5 3 Displaying a View TraitsUI provides three methods for creating a window or panel from a View object The first two configure_traits and edit_traits are defined on the HasTraits class which is a superclass of all Traits based model classes as well as of Handler and its subclasses The third method ui is defined on the View class itself configure_traits The configure_traits method creates a standalone window for a given View object i e it does not require an existing GUI to run in It is therefore suitable for building command line functions as well as providing an accessible tool for the beginning TraitsUI programmer The configure_traits method also provides options for saving trait attribute values to and restoring them from a file Refer to the Traits API Reference for details edit_traits The edit_traits method is very
83. emarks are the property of their respective owners Enthought Inc 515 Congress Avenue Suite 2100 Austin TX 78701 1 512 536 1057 voice 1 512 536 1059 fax http www enthought com info enthought com TraitsUI 4 User Manual Release 4 6 0 dev153 1 2 Introduction This guide is designed to act as a conceptual guide to TraitsUI an open source package built and maintained by Enthought Inc The TraitsUI package is a set of GUI Graphical User Interface tools designed to complement Traits another Enthought open source package that provides explicit typing validation and change notification for Python This guide is intended for readers who are already moderately familiar with Traits those who are not may wish to refer to the Traits User Manual for an introduction This guide discusses many but not all features of TraitsUI For complete details of the TraitsUI API refer to the Traits API Reference 1 2 1 The Model View Controller MVC Design Pattern A common and well tested approach to building end user applications is the MVC Model View Controller design pattern In essence the MVC pattern the idea that an application should consist of three separate entities a model which manages the data state and internal business logic of the application one or more views which format the model data into a graphical display with which the end user can interact and a controller which manages the transfer of informat
84. es 26 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Binding a Singleton Handler to a View To associate a given custom Handler with all windows produced from a given View assign an instance of the custom Handler class to the View s handler attribute The result of this technique as shown in Example 9 is that the window created by the View object is automatically controlled by the specified handler instance Linking Handler and View at Edit Time It is also possible to associate a custom Handler with a specific window without assigning it permanently to the View Each of the three TraitsUI window building methods the configure_traits and edit_traits methods of the HasTraits class and the ui method of the View class has a handler keyword argument Assigning an instance of Handler to this argument gives that handler instance control only of the specific window being created by the method call This assignment overrides the View s handler attribute Creating a Default View Within a Handler You seldom need to associate a single custom Handler with several different Views or vice versa although you can in theory and there are cases where it is useful to be able to do so In most real life scenarios a custom Handler is tailored to a particular View with which it is always used One way to reflect this usage in the program design is to define the View as part of the Handler The same rules apply
85. ese events can be associated to callbacks ie functions or methods processing the event In a GUI callbacks created by user generated events are placed on an event stack The event loop processes each call on the event queue one after the other thus emptying the event queue The flow of the program is still sequential two code blocks never run at the same time in an event loop but the execution order is chosen by the user and not by the developer Defining callbacks for the modification of an attribute foo of a HasTraits object can be done be creating a method called _foo_changed Here is an example of a dialog with two textboxes input and output Each time input is modified is content is duplicated to output code snippet 4 from traits api import x class EchoBox HasTraits input Str output Str def _input_changed self self output self input EchoBox configure_traits Events that do not correspond to a modification of an attribute can be generated with a Button traits The callback is then called _foo_fired Here is an example of an interactive traitsUI application using a button code snippet 5 from traits api import x from traitsui api import View Item ButtonEditor class Counter HasTraits value Int add_one Button def _add_one_fired self self value 1 view View value Item add_one show_label False Counter configure_traits Clickin
86. esired appearance E Edit prop Eek First name RE Last name Department Fig 1 2 Figure 2 User interface for Example 2 A View object can have a variety of attributes which are set in the View definition following any Group or Item objects The sections on Contents of a View through Advanced View Concepts explore the contents and capabilities of Views Refer to the Traits API Reference for details of the View class Except as noted all example code uses the configure_traits method a detailed description of this and other techniques for creating GUI displays from Views can be found in Displaying a View 1 3 The View and Its Building Blocks 5 TraitsUI 4 User Manual Release 4 6 0 dev153 1 3 2 Contents of a View The contents of a View are specified primarily in terms of two basic building blocks Item objects which as suggested by Example 2 correspond roughly to individual trait attributes and Group objects A given View definition can contain one or more objects of either of these types which are specified as arguments to the View constructor as in the case of the three Items in Example 2 The remainder of this chapter describes the Item and Group classes The Item Object The simplest building block of a View is the tem object An Item specifies a single interface widget usually the display for a single trait attribute of a HasTraits object The content appearance and behavior of the widget
87. esults_obj x x results_obj y y results_obj width width class AcquisitionThread Thread Acquisition loop This is the worker thread that retrieves images from the camera displays them and spawns the processing job non wants_abort False def process self image mw Spawns the processing job try if self processing_job isAlive self display Processing too slow return except AttributeError pass self processing_job Thread target process args image self results self processing_job start def run self w Runs the acquisition loop self display Camera started n_img 0 while not self wants_abort n_img 1 img self acquire self experiment self display td image captured self image_show img self process img sleep 1 self display Camera stopped n_img 2 1 Writing a graphical application for scientific programming using TraitsUI 4 115 TraitsUI 4 User Manual Release 4 6 0 dev153 The GUI elements The GUI of this application is separated in two and thus created by a sub class of SplitApplicationWindow On the left a plotting area made of an MPL figure and its editor displays the images acquired by the camera On the right a panel hosts the TraitsUI representation of a ControlPanel object This object is mainly a container for our other objects but it also has an Button for starting or stopping the acquisition and a string
88. f sleep 2 print MyThread done my_thread MyThread 6 threading http docs python org lib module threading html 108 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 my_thread start print Main thread done The above code yields the following output Main thread done MyThread done Getting threads and the GUI event loop to play nice Suppose you have a long running job in a TraitsUI application If you implement this job as an event placed on the event loop stack it is going to freeze the event loop while running and thus freeze the UI as events will accumulate on the stack but will not be processed as long as the long running job is not done remember the event loop is sequential To keep the UI responsive a thread is the natural answer Most likely you will want to display the results of your long running job on the GUI However as usual with threads one has to be careful not to trigger race conditions Naively manipulating the GUI objects in your thread will lead to race conditions and unpredictable crash suppose the GUI was repainting itself due to a window move for instance when you modify it In a wxPython application if you start a thread GUI event will still be processed by the GUI event loop To avoid collisions between your thread and the event loop the proper way of modifying a GUI object is to insert the modifica tions in the even
89. factory The remainder of this chapter examines these alternatives more closely 1 8 1 Specifying an Alternate Trait Editor Factory As of this writing the TraitsUI package includes a wide variety of predefined trait editor factories which are de scribed in Basic Trait Editor Factories and Advanced Trait Editors Some additional editor factories are specific to the wx Widgets toolkit and are defined in one of the following packages e traitsui wx e traitsui wx extra e traitsui wx extra windows specific to Microsoft Windows These editor factories are described in Extra Trait Editor Factories For a current complete list of editor factories refer to the Traits API Reference Other packages can define their own editor factories for their own traits For example enthought kiva api KivaFont uses a KivaFontEditor and enthought enable2 traits api RGBAColor uses an RGBAColorEditor For most predefined trait types see Traits User Manual there is exactly one predefined trait editor factory suitable for displaying it the editor factory that is assigned as its default There are exceptions however for example a Str trait defaults to using a TextEditor but can also use a CodeEditor or an HTMLEditor A List trait can be edited by means of ListEditor TableEditor if the List elements are HasTraits objects CheckListEditor or SetEditor Furthermore the TraitsUI package includes tools for building additional trait editors and factories
90. ference to that window and to the objects whose trait attributes are displayed in it Each entry in the View s context see The View Context becomes an attribute of the UIInfo object For example the UIInfo object created in Example 7 has attributes h1 and h2 whose values are the objects house1 and house2 respectively In Example 1 through Example 6 the created UIInfo object has an attribute object whose value is the object sam Whenever a window event causes a Handler method to be called TraitsUI passes the corresponding UIInfo object as one of the method arguments This gives the Handler the information necessary to perform its tasks 1 6 2 Assigning Handlers to Views In accordance with the MVC design pattern Handlers and Views are separate entities belonging to distinct classes In order for a custom Handler to provide the control logic for a window it must be explicitly associated with the View for that window The TraitsUI package provides three ways to accomplish this e Make the Handler an attribute of the View e Provide the Handler as an argument to a display method such as edit_traits e Define the View as part of the Handler 1 Except those implemented via the enabled_when visible_when and defined_when attributes of Items and Groups 12 Other attributes of the UInfo object include a UI object and any trait editors contained in the window see Introduction to Trait Editor Factories and The Predefined Trait Editor Factori
91. g on the button adds the _add_one_fired method to the event queue and this method gets executed as soon as the GUI is ready to handle it Most of the time that is almost immediately Edit properties value 3 Add one Undo Revert OK Cancel Help 2 1 Writing a graphical application for scientific programming using TraitsUI 4 107 TraitsUI 4 User Manual Release 4 6 0 dev153 This programming pattern is called reactive programming the objects react to the changes made to their attributes In complex programs where the order of execution is hard to figure out and bound to change like some interactive data processing application this pattern is extremely efficient Using Button traits and a clever set of objects interacting with each others complex interactive applications can be built These applications are governed by the events generated by the user in contrast to script like applications batch programming Executing a long operation in the event loop blocks the reactions of the user interface as other events callbacks are not processed as long as the long operation is not finished In the next section we will see how we can execute several operations in the same time 2 1 3 Breaking the flow in multiple threads What are threads A standard python program executes in a sequential way Consider the following code snippet do_a do_b do_c do_b is not called until
92. ging support clicking the column separator in the column label row does not work e Data dragging The user can drag the contents of any cell by clicking and dragging 1 10 6 TabularEditor Suitable for lists arrays and other large sequences of objects Default for none Required parameters adapter Optional parameters activated clicked column_clicked dclicked drag_move editable horizon tal_lines images multi_select operations right_clicked right_dclicked selected selected_row show_titles vertical_lines The TabularEditor factory can be used for many of the same purposes as the TableEditor factory that is for displaying a table of attributes of lists or arrays of objects While similar in function the tabular editor has advantages and disadvantages relative to the table editor Advantages e Very fast The tabular editor uses a virtual model which accesses data from the underlying model only as needed For example if you have a million element array but can display only 50 rows at a time the editor requests only 50 elements of data at a time Very flexible data model The editor uses an adapter model to interface with the underlying data This strategy allows it to easily deal with many types of data representation from list of objects to arrays of numbers to tuples of tuples and many other formats Supports useful data operations including Moving the selection up and down using the keyboard arrow keys
93. h the representation of the Camera object created is the last example on top and the Display object below it Edit properties Exposure 10 gain 1 lt The View attribute of the container object has been tweaked to get the representation we are interested in traitsUI is told to display the camera item with a custom style which instructs it to display the representation of the object inside the current panel The show_label argument is set to False as we do not want the name of the displayed object camera for instance to appear in the dialog See the traitsUI manual for more details on this powerful feature The camera and display objects are created during the call to the creator of the container object and passed as its attributes immediately container Container camera Camera display TextDisplay 2 1 Writing a graphical application for scientific programming using TraitsUI 4 105 TraitsUI 4 User Manual Release 4 6 0 dev153 Writing a graphical script If you want to create an application that has a very linear flow popping up dialogs when user input is required like a setup wizard often used to install programs you already have all the tools to do it You can use object oriented programming to write your program and call the objects configure_traits method each time you need user input This might be an easy way to modify an existing script to make it m
94. he call sam trait_views Group returns an empty list even though both of the Views defined in SimpleEmployee contain Groups This is because only named elements are returned by the method Group and Item are both subclasses of ViewSubElement while ViewSubElement and View are both subclasses of ViewElement Thus a callto trait_views ViewSubElement returns a list of named Items and Groups while trait_views ViewElement returns a list of named Items Groups and Views trait_view The trait_view method is used for three distinct purposes e To retrieve the default View associated with an object e To retrieve a particular named ViewElement i e Item Group or View e To define a new named ViewElement For example e obj trait_view returns the default View associated with object obj For example sam trait_view returns the View object called traits_view Note that unlike trait_views trait_view returns the View itself not its name e obj trait_view my_view returns the view element named my_view or None if my_view is not defined e obj trait_view my_group Group a b defines a Group with the name my_group Note that although this Group can be retrieved using t rait_view its name does not appear in the list returned by traits_view Group This is because my_group is associated with obj itself rather than with its class 96 Chapter 1 TraitsUI 4 User Manual TraitsUI
95. he view User hel ser help s help help_id The help attribute is a deprecated way to specify that the View has a Help button Use the buttons at tribute instead see Command But tons the buttons Attribute for de tails The help_id attribute is not used by Traits but can be used by a custom help handler Unique identifier The id attribute is used as a key to save user preferences about a view such as customized size and position so that they are restored the next time the view is opened The value of id must be unique across all Traits based applications on a system If no value is specified no user preferences are saved for the view 18 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 5 Advanced View Concepts The preceding chapters of this Manual give an overview of how to use the View class to quickly construct a simple window for a single HasTraits object This chapter explores a number of more complex techniques that significantly increase the power and versatility of the View object e Internal Views Views can be defined as attributes of a HasTraits class one class can have multiple views View attributes can be inherited by subclasses e External Views A view can be defined as a module variable inline as a function or method argument or as an attribute of a Handler e Ways of displaying Views You can display a View by calling configure_trai
96. he wxWindows implementation of image enumeration editors do not use the PyFace ImageResource class In the wxWidgets implementation image enumeration editors use the following rules to locate images to use 1 Only GIF gif images are currently supported 58 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 2 The base file name of the image is the string representation of the value with spaces replaced by underscores and the suffix argument if any appended Note that suffix is not a file extension but rather a string appended to the base file name For example if suffix is _origin and the value is top left the image file name is top_left_origin gif 3 If the path parameter is defined it is used to locate the file It can be absolute or relative to the file where the image enumeration editor is defined 4 If path is not defined and the klass parameter is defined it is used to locate the file The klass parameter must be a reference to a class The editor searches for an images subdirectory in the following locations a The directory that contains the module that defines the class b If the class was executed directly the current working directory c If path and klass are not defined and the module parameter is defined it is used to locate the file The module parameter must be a reference to a module The editor searches for an images subdirectory of the directory that con
97. imple style is generated instead 40 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 The text Style The text editor style is the simplest of the editor styles When applied to a given trait attribute it generates a text representation of the trait value in an editable box Thus the enumeration editor in text style looks like the following Part number ZEA Fig 1 18 Figure 18 Text style of enumeration editor For this type of editor the end user must type in a valid value for the attribute If the user types an invalid value the validation method for the attribute see Traits User Manual notifies the user of the error for example by shading the background of the text box red The text representation of an attribute to be edited in a text style editor is created in one of the following ways listed in order of priority 1 The function specified in the format_func attribute of the Item see The Item Object if any is called on the attribute value 2 Otherwise the function specified in the format_func parameter of the trait editor factory if any is called on the attribute value 3 Otherwise the Python style formatting string specified in the format_str attribute of the Item see The Item Object if any is used to format the attribute value 4 The Python style formatting string specified in the format_str parameter of the trait editor factory if any is used to format the a
98. implemented for this editor The simple and custom styles of this editor are identical Simple Click Me Custom Click Me text style unavailable read only style unavailable Fig 1 23 Figure 23 Button editor styles By default the label of the button is the name of the Button or Event trait to which it is linked 17 However this label can be set to any string by specifying the label parameter of ButtonEditor as that string Alternatively use label_value to specify the name of the trait to use as the button label You can specify a value for the trait to be set to using the value parameter If the trait is an Event then the value is not stored but might be useful to an event listener Use values_trait to specify the name of the trait on the object that contains the list of possible values If this is set then the value label and label_value traits are ignored instead they will be set from this list When this button is clicked the value set will be the one selected from the drop down CheckListEditor Suitable for List Default for none Optional parameters cols name values 16 In Traits a Button and an Event are essentially the same thing except that Buttons are automatically associated with button editors 17 TraitsUI makes minor modifications to the name capitalizing the first letter and replacing underscores with spaces as in the case of a default Item label see The View Object 46 Chapter 1
99. in this browser the panel collapses and control is returned to the original editor widget which is automatically populated with the new path string The user can also drag and drop a directory object onto the simple style editor The custom style displays a directory browser panel in which the user can expand or collapse directory structures and click a folder icon to select a directory The text style of editor is simply a text box into which the user can type a directory path The readonly style is identical to the text style except that the text box is not editable The optional parameters are the same as the FileEditor No validation is performed on Directory traits the user must ensure that a typed in value is in fact an actual directory on the system EnumEditor Suitable for Enum Any Default for Enum Required parameters for non Enum traits values or name Optional parameters cols evaluate mode The editors generated by EnumEditor enable the user to pick a single value from a closed set of values The simple style of editor is a drop down list box The custom style is a set of radio buttons Use the cols parameter to specify the number of columns of radio buttons 52 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Simple A 495 r jf A 495 R i226 f 15 18 Custom fC A 498 t 75 17 Text 4 495 ReadOnly 4 495 Fig 1 30 Figure 30 Enumeration edito
100. ing default trait editors from traits api import HasTraits Str Range Bool from traitsui api import View Item class Adult HasTraits first_name Str last_name Str age Range 21 99 registered_voter Bool traits_view View Item Item Item Item name first_name name last_name name age name registered_voter alice Adult first_name Alice last_name Smith age 42 registered_voter True alice configure_traits Notice that each trait is displayed in an appropriate widget even though the code does not explicitly specify any widgets at all The two Str traits appear in text boxes the Range is displayed using a combination of a text box and a slider and the Bool is represented by a checkbox Each implementation is generated by the default trait editor factory TextEditor RangeEditor and BooleanEditor respectively associated with the trait type 1 8 Introduction to Trait Editor Factories 37 TraitsUI 4 User Manual Release 4 6 0 dev153 EJ Edit properties SE First name alice Last name Smith Age 21 H 99 42 Registered voter V Fig 1 12 Figure 12 User interface for Example 12 TraitsUI is by no means limited to these defaults There are two ways to override the default representation of a trait attribute in a TraitsUI window e Explicitly specifying an alternate trait editor factory e Specifying an alternate style for the editor generated by the
101. intained in the reverse order of the items in the table regardless of whether the table is sortable or reorderable Filtering and Searching You can provide an option for the user to apply a filter to a table so that only items that pass the filter are displayed This feature can be very useful when dealing with lengthy lists You can specify a filter to apply to the table either directly or via another trait Table filters must be instances of traitsui api TableFilter or of a subclass of TableFilter Some subclasses of TableFilter that are provided by the TraitsUI package include EvalTableFilter RuleTableFilter and MenuTableFilter See the Traits API Reference for details about these classes The TraitsUI package also provides instances of these filter classes as templates which cannot be edited or deleted but which can be used as models for creating new filters The filter parameter specifies a filter that is applied to the table when it is first displayed The filter_name parameter specifies an extended trait name for a trait that is either a table filter object or a callable that accepts an object and returns True if the object passes the filter criteria or false if it does not You can use filter_name to embed a view of a table filter in the same view as its table You can specify use the filters parameter to specify a list of table filters that are available to apply to a table When filters is specified a drop down list box appe
102. ion between model and view so that neither needs to be directly linked to the other In practice particularly in simple applications the view and controller are often so closely linked as to be almost indistinguishable but it remains useful to think of them as distinct entities The three parts of the MVC pattern correspond roughly to three classes in the Traits and TraitsUI packages e Model HasTraits class Traits package e View View class TraitsUI package e Controller Handler class TraitsUI package The remainder of this section gives an overview of these relationships The Model HasTraits Subclasses and Objects In the context of Traits a model consists primarily of one or more subclasses or instances of the HasTraits class whose trait attributes typed attributes as defined in Traits represent the model data The specifics of building such a model are outside the scope of this manual please see the Traits User Manual for further information The View View Objects A view for a Traits based application is an instance of a class called conveniently enough View A View object is essentially a display specification for a GUI window or panel Its contents are defined in terms of instances of two other classes Jtem and Group These three classes are described in detail in The View and Its Building Blocks for the moment it is important to note that they are all defined independently of the model they are used to display Note
103. ion of the interfaces that they produce In particular no code at all has been required to produce appropriate widgets for the Traits to be viewed or edited in a given window This is one of the strengths of TraitsUI usable interfaces can be produced simply and with a relatively low level of UI programming expertise An even greater strength lies in the fact that this simplicity does not have to be paid for in lack of flexibility Where a novice TraitsUI programmer can ignore the question of widgets altogether a more advanced one can select from a variety of predefined interface components for displaying any given Trait Furthermore a programmer who is comfortable both with TraitsUI and with UI programming in general can harness the full power and flexibility of the underlying GUI toolkit from within Traits UI The secret behind this combination of simplicity and flexibility is a TraitsUI construct called a trait editor factory A trait editor factory encapsulates a set of display instructions for a given trait type hiding GUI toolkit specific code inside an abstraction with a relatively straightforward interface Furthermore every predefined trait type in the Traits package has a predefined trait editor factory that is automatically used whenever the trait is displayed unless you specify otherwise Consider the following script and the window it creates Example 12 Using default trait editors default_trait_editors py Example of us
104. ious attributes of TreeNode to define operations or behavior of nodes Shortcut Menus on Nodes Use the menu attribute of TreeNode to define a shortcut menu that opens when the user right clicks on a node The value is a TraitsUI or PyFace menu containing Action objects for the menu commands In Example 16 the following lines define the node type for employees including a shortcut menu for employee nodes TreeNode node_for Department auto_open True children employees label name menu Menu NewAction Separator DeleteAction Separator RenameAction Separator CopyAction CutAction PasteAction view View Group name orientation vertical show_left True add Employee Allowing the Hierarchy to Be Modified If a node contains children you can allow objects to be added to its set of children through operations such as dragging and dropping copying and pasting or creating new objects Two attributes control these operations add and move Both are lists of classes The add attribute contains classes that can be added by any means including creation The code snippet in the preceding section includes an example of the add attribute The move attribute contains classes that can be dragged and dropped but not created The move attribute need not be specified if all classes that can be moved can also be created and therefore are specified in the add value No
105. is required pop up panels drop down lists or dialog boxes are often used in such cases For example the simple version of the enumeration editor for the wx Widgets toolkit looks like this Part number v Fig 1 15 Figure 15 Simple style of enumeration editor However when the user clicks on the widget a drop down list appears Part number A 495 Fig 1 16 Figure 16 Simple enumeration editor with expanded list The simple editor style is most suitable for windows that must be kept small and concise The custom Siyle The custom editor style generally generates the most detailed version of any given editor It is intended to provide maximal functionality and information without regard to the amount of window space used For example in the wx Windows toolkit the custom style the enumeration editor appears as a set of radio buttons rather than a drop down list 495 OR 122 OTS 18 Oa498 OTS 17 A Part number WA Fig 1 17 Figure 17 Custom style of enumeration editor In general the custom editor style can be very useful when there is no need to conserve window space as it enables the user to see as much information as possible without having to interact with the widget It also usually provides the most intuitive interface of the four Note that this style is not defined explicitly for all trait editor implementations If the custom style is requested for an editor for which it is not defined the s
106. ject__updated_changed self info if info initialized info ui title x class TestClass HasTraits b1 Bool b2 Bool b3 Bool _updated Bool False viewl View bl b2 b3 title Alter Title handler TC_Handler buttons OK Cancel te TestClass tc configure_traits view view1 s Alter Title KBX OK Cancel Implementing Custom Window Commands Another use of a Handler is to define custom window actions which can be presented as buttons menu items or toolbar buttons 30 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 s Alter Title CE Fig 1 7 Figure 7 Before and after views of Example 9 Actions In TraitsUI window commands are implemented as instances of the Action class Actions can be used in command buttons menus and toolbars Suppose you want to build a window with a custom Recalculate action Suppose further that you have defined a subclass of Handler called MyHandler to provide the logic for the window To create the action 1 Add a method to MyHandler that implements the command logic This method can have any name e g do_recalc but must accept exactly one argument a UIInfo object 2 Create an Action instance using the name of the new method e g recalc Action name Recalculate action do_recalc Custom Command Buttons The simplest way to turn an Actio
107. l three of these subclasses widget An interactive element in a graphical user interface e g a scrollbar button pull down menu or text box wizard An interface composed of a series of dialog box windows usually used to guide a user through an interactive task such as software installation wx A shorthand term for the low level GUI toolkit on which TraitsUI and PyFace are currently based wx Widgets and its Python wrapper wxPython 1 14 Appendix ll Editor Factories for Predefined Traits Predefined traits that are not listed in this table use TextEditor by default and have no other appropriate editor factories Trait Default Editor Factory Other Possible Editor Factories Any TextEditor EnumEditor ImageEnumEditor Valu Array ArrayEditor for 2 D arrays Bool BooleanEditor ThemedCheckboxEditor Button ButtonEditor CArray ArrayEditor for 2 D arrays CBool BooleanEditor CComplex TextEditor CFloat CInt CLong TextEditor LEDEditor Code CodeEditor 98 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Table 1 1 continued from previous page Trait Default Editor Factory Other Possible Editor Factories Color ColorEditor Complex TextEditor CStr CUnicode TextEditor multi_line True CodeEditor HTMLEditor Dict TextEditor ValueEditor Directory Dire
108. lbar The image must be a Pyface ImageResource instance if a path to the image file is not specified it is assumed to be in an images subdirectory of the directory where ImageResource is used From pyface api import ImageResource recalc Action name Recalculate action do_recalc toolip Recalculate the results image ImageResource recalc png 2 If the View does not already include a ToolBar create one and assign it to the View s toolbar attribute 3 Add the Action to the ToolBar As with a MenuBar these steps can be executed all at once when the View is created as in the following code View view contents ee toolbar ToolBar my_action 1 7 TraitsUI Themes Beginning in Traits 3 0 TraitsUI supports using themes to customize the appearance of user interfaces by applying graphical elements extracted from simple images For example Figure 8 shows an unthemed Traits user interface s Unthemed Traits UI TER An Unthemed Label Name Pil Johnson Age 1 Y 100 32 Weight Gender 2 Fig 1 8 Figure 8 Unthemed Traits user interface Figure 9 shows the same user interface with a theme applied to it Figure 10 shows the same user interface with a different theme applied 32 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 s Themed Traits UI Fig 1 9 Figure 9 Themed Traits user interface s Themed Traits UI DBR
109. led The user can type a file path in the combo box or select one of entries previous values Clicking the button opens a browser panel similar to the custom style of editor When the user selects a file in this browser the panel collapses and control is returned to the original editor widget which is automatically populated with the new path string For either version of the simple style the user can drag and drop a file object onto the control The custom style displays a file system browser panel in which the user can expand or collapse directory structures and click an icon to select a file You can specify a list of filters to apply to the file names displayed using the filter keyword parameter of the factory function In Figure 31 the Custom with Filter editor uses a filter value of x py to display only Python source files You can also specify this parameter for the simple style and it will be used in the file selection dialog box or 54 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 pop up file system browser panel Alternatively you can specify filter_name whose value is an extended trait name of a trait attribute that contains the list of filters The reload_name parameter is an extended trait name of a trait attribute that is used to notify the editor when the view of the file system needs to be reloaded The truncate_ext parameter is a Boolean that indicates
110. licit formatting follows these rules e Indented lines that start with a dash are converted to unordered lists e Indented lines that start with an asterisk are converted to ordered lists e Indented lines that start with any other character are converted to code blocks e Blank lines are converted to paragraph separators The following text produces the same displayed HTML as in Figure 34 when format_text is True This is a code block def foo bar print bar bar This is an unordered list An unordered list 56 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 a HTML Editor Test This is a code block def foo i bar print bar This is an unordered list An unordered list This is an ordered list 1 One 2 Two 3 Three Enter formatted text andjor HTML below 1 lt p gt This is a code block lt p gt 2 lt code gt 3 def foo bar j 4 print Har Har S lt f code gt 6 Y lt p gt This is an unordered list lt p gt azul 9g li gt inszfli gt 10 lt li gt unorderedsf li gt lis lt sli gt lisast sfli gt 12 ful gt 13 14 lt p gt This is an ordered list lt p gt 15 lt o0l gt 16 1li gt One 1i gt L 21lizTworfli gt 186 1li gt Three j 1i gt 19 lt f ol gt 1 9 The a Hai Editor Factories 1AA m AA mMm 1 Weers AT 57 TraitsUI 4 User Manual Release 4 6 0 dev153
111. lly sets the attribute show_help info The user clicks the Help button To call a custom help handler in addition to or con instead of the global help handler for this window trol None Reacting to Trait Changes The setattr method described above is called whenever any trait value is changed in the UI However TraitsUI also provides a mechanism for calling methods that are automatically executed whenever the user edits a particular trait While you can use static notification handler methods on the HasTraits object you might want to implement behavior that concerns only the user interface In that case following the MVC pattern dictates that such behavior should not be implemented in the model part of the code In keeping with this pattern TraitsUI supports user interface notification methods which must have a signature with the following format extended _traitname_changed info This method is called whenever a change is made to the attribute specified by extended_traitname in the context of the View used to create the window see Multi Object Views where the dots in the extended trait reference have been replaced by underscores For example for a method to handle changes on the salary attribute of the object whose context key is object the default object the method name should be object_salary_changed By contrast a subclass of Handler for Example 7 might include a method called h2_price_changed to be c
112. longer appear in the code but only the attributes they are associated to A HasTraits object has an edit_traits method that creates a graphical panel to edit its attributes This method creates and returns the panel but does not start its event loop The panel is not yet alive unlike with the configure_traits method Traits uses the wxWidget toolkit by default to create its widget They can be turned live and displayed by starting a wx application and its main loop ie event loop in wx speech code snippet 3 from traits api import x import wx class Counter HasTraits value Int Counter edit_traits wx PySimpleApp MainLoop The Counter edit_traits line creates a counter object and its representation a dialog with one integer represented However it does not display it until a wx application is created and its main loop is started Usually it is not necessary to create the wx application yourself and to start its main loop traits will do all this for you when the configure_traits method is called 106 Chapter 2 TraitsUI 4 Tutorials TraitsUI 4 User Manual Release 4 6 0 dev153 Reactive programming When the event loop is started the program flow is no longer simply controlled by the code the control is passed on to the event loop and it processes events until the user closes the GUI and the event loop returns to the code Interactions with objects generate events and th
113. me Str age Range 1 100 weight Float gender Enum Male Female view View Group Label An Unthemed Label Item name Item age Item weight Item gender F title Unthemed TraitsUI 13 This is very similar to the way that PyFace ImageResource objects work when no search path is specified 14 PyFace is provided by the pyface package in the Traits GUI project not to be confused with the TraitsUI package traitsui the subject of this document 1 7 TraitsUI Themes 35 21 22 TraitsUI 4 User Manual Release 4 6 0 dev153 Test configure_traits Example 11 shows the code for the user interface shown in Figure 9 which is essentially the same as in Example 10 but with theme data added Example 11 TraitsUI with themes themed py Example of a TraitsUI with themes from traits api import HasTraits Str Range Float Enum from traitsui api import View Group Item Label from traitsui wx themed_text_editor import ThemedTextEditor class Test HasTraits name Str age Range 1 100 weight Float gender Enum Male Female view View Group Group Label A Themed Label GF6 Item name Item age Item weight ditor ThemedTextEditor Item gender group_theme GDO group_theme G item_theme BOB label_theme BEA title Themed Trai
114. meter which is the model object They also can accept metadata as keyword parameters class Model1View model None metadata class Controller model None metadata The difference between the ModelView and Controller classes lies in the context dictionary that each one passes to its associated user interface as described in the following sections 1 6 Controlling the Interface the Handler 27 TraitsUI 4 User Manual Release 4 6 0 dev153 Controller Class The Controller class is normally used when implementing a standard MVC based design and plays the controller role in the MVC design pattern The model role is played by the object referenced by the Controller s model attribute and the view role is played by the View object associated with the model object The context dictionary that a Controller object passes to the View s ui method contains the following entries e object The Controller s model object controller The Controller object itself Using a Controller as the handler class assumes that the model object contains most if not all of the data to be viewed Therefore the model object is used for the object key in the context dictionary so that its attributes can be easily referenced with unqualified names such as Item name ModelView Class The ModelView class is useful when creating a variant of the standard MVC design pattern In this variant the ModelView
115. multiple independent model objects i e objects that are not attributes of one another For example suppose you are building a real estate listing application and want to display a window that shows two properties side by side for a comparison of price and features This is straightforward in TraitsUI as the following example shows Example 7 Using a multi object view with a context One possible exception is the case where a View object is defined as a variable i e outside any class or within a custom Handler and is associated more or less equally with multiple model objects see Multi Object Views 1 5 Advanced View Concepts 23 TraitsUI 4 User Manual Release 4 6 0 dev153 multi_object_view py Sample code to show multi object view with context from traits api import HasTraits Str Int Bool from traitsui api import View Group Item Sample class class House HasTraits address Str bedrooms Int pool Bool price Int View object designed to display two objects of class House comp_view View Group Group Item hl address resizable True Item hl bedrooms Item hl pool Item hl price show_border True hy Group Item h2 address resizable True Item h2 bedrooms Item h2 pool Item h2 price show_border True J orientation horizontal Jy title House Comparison A pair of houses to demonstrate the View housel House ad
116. n View usually specifying the display op tions to be used for a single trait attribute An instance of the TraitsUI class Item live A term used to describe a window that is linked directly to the underlying model data so that changes to data in the interface are reflected immediately in the model A window that is not live displays and manipulates a copy of the model data until the user confirms any changes livemodal A term used to describe a window that is both Jive and modal MVC A design pattern for interactive software applications The initials stand for Model View Controller the three distinct entities prescribed for designing such applications See the glossary entries for model view and controller modal A term used to describe a window that causes the remainder of the application to be suspended so that the user can interact only with the window until it is closed 19 This is not always the case in Python where attributes can be added to individual objects 1 13 Appendix I Glossary of Terms 97 TraitsUI 4 User Manual Release 4 6 0 dev153 model A component of the MVC design pattern for interactive software applications The model consists of the set of classes and objects that define the underlying data of the application as well as any internal i e non GUI related methods or functions on that data nonmodal A term used to describe a window that is neither live nor modal object Synonym for insta
117. n into a window command is to add it to the buttons attribute for the View It appears in the button area of the window along with any standard buttons you specify 1 Define the handler method and action as described in Actions 2 Include the new Action in the buttons attribute for the View View view contents a buttons OKButton CancelButton recalc Menus and Menu Bars Another way to install an Action such as recale as a window command is to make it into a menu option 1 Define the handler method and action as described in Actions 2 If the View does not already include a MenuBar create one and assign it to the View s menubar attribute 3 If the appropriate Menu does not yet exist create it and add it to the MenuBar 4 Add the Action to the Menu These steps can be executed all at once when the View is created as in the following code 1 6 Controlling the Interface the Handler 31 TraitsUI 4 User Manual Release 4 6 0 dev153 View view contents E ee menubar MenuBar Menu my_action name My Special Menu Toolbars A third way to add an action to a Traits View is to make it a button on a toolbar Adding a toolbar to a Traits View is similar to adding a menu bar except that toolbars do not contain menus they directly contain actions 1 Define the handler method and the action as in Actions including a tooltip and an image to display on the too
118. nce panel A user interface region similar to a window except that it is embedded in a larger window rather than existing independently predefined trait type Any trait type that is built into the Traits package subpanel A variation on a panel that ignores i e does not display any command buttons trait A term used loosely to refer to either a trait type or a trait attribute trait attribute An attribute whose type is specified and checked by means of the Traits package trait type A type checked data type either built into or implemented by means of the Traits package Traits An open source package engineered by Enthought Inc to perform explicit typing in Python TraitsUI A high level user interface toolkit designed to be used with the Traits package View A template object for constructing a GUI window or panel for editing a set of traits The structure of a View is defined by one or more Group or Item objects a number of attributes are defined for specifying display options including height and width menu bar if any and the set of buttons if any that are displayed A member of the TraitsUI class View view A component of the MVC design pattern for interactive software applications The view component encom passes the visual aspect of the application as opposed to the underlying data the model and the application s behavior the controller ViewElement A View Group or Item object The ViewElement class is the parent of al
119. nel The user must enter a recognized color name or a properly formatted r g b tuple 48 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Simple 2528 ee BERETTET E CaS 5 aS 5 Text 255285 readonly M Fig 1 26 Figure 26 Color editor styles Basic colors Hue Sat Green Define Custom Colors gt ColorlSolid Lum Blue Fig 1 27 Figure 27 Custom color selection dialog box for Microsoft Windows XP 1 9 The Predefined Trait Editor Factories 49 TraitsUI 4 User Manual Release 4 6 0 dev153 The read only style displays the text representation of the currently selected Color value name or tuple on a minimally sized background of the corresponding color For advanced users The mapped keyword parameter of ColorEditor is a Boolean value indicating whether the trait being edited has a built in mapping of user oriented representations e g strings to internal representations Since ColorEditor is generally used only for Color traits which are mapped e g cyan to wx Colour 0 255 255 this parameter defaults to True and is not of interest to most programmers However it is possible to define a custom color trait that uses ColorEditor but is not mapped i e uses only one representation which is why the attribute is available CompoundEditor Suitable for special Default for compound traits Opti
120. nisms is used in any particular table although the TraitsUI package does not enforce a separation If the user has manually ordered the items sorting them would throw away that effort If the reorderable parameter is True Move up a and Move down g icons appear in the table toolbar Clicking one of these icons changes the position of the selected item If the sortable parameter is True the default then the user can sort the items in the table based on the values in a column by Control clicking the header of that column e On the first click the items are sorted in ascending order The characters gt gt appear in the column header to indicate that the table is sorted ascending on this column s values e On the second click the items are sorted descending order The characters lt lt appear in the column header to indicate that the table is sorted descending on this column s values e On the third click the items are restored to their original order and the column header is undecorated If the sort_model parameter is true the items in the list being edited are sorted when the table is sorted The default value is False in which case the list order is not affected by sorting the table If sortable is True and sort_model is False then a Do not sort columns icon EB appears in the table toolbar Clicking this icon restores the original sort order If the reverse parameter is True then the items in the underlying list are ma
121. node in Figure 54 that is labeled Acme Labs Inc would not appear Additionally several attributes of TreeNode also affect the display of the tree e icon_path A directory path to search for icon files This path can be relative to the module it is used in e icon_item The icon for a leaf node e icon_open The icon for a node with children whose children are displayed e icon_group The icon for a node with children whose children are not displayed The wx Widgets implementation automatically detects the bitmap format of the icon 1 11 Extra Trait Editor Factories The traitsui wx package defines a few editor factories that are specific to the wxWidgets toolkit some of which are also specific to the Microsoft Windows platform These editor factories are not necessarily implemented for other GUI toolkits or other operating system platforms 1 11 1 AnimatedGIFEditor Suitable for File Default for none Optional parameters playing 1 11 Extra Trait Editor Factories 89 TraitsUI 4 User Manual Release 4 6 0 dev153 AnimatedGIFEditor generates a display of the contents of an animated GIF image file The Boolean playing param eter determines whether the image is animated or static 1 11 2 ArrayViewEditor Suitable for 2 D Array 2 D CArray Default for none Optional parameters format show_index titles transpose Array ViewEditor generates a tabular display for an array It is suitable for use
122. ntered on the GUI and not on the code TraitsUI provides a beautiful answer to this problem by building graphical representations of an object Traits and TraitsUI have their own manuals http code enthought com traits and the reader is encouraged to refer to these for more information We will use TraitsUI for all our GUIs This forces us to store all the data and parameters in objects which is good programming style The GUI thus reflects the structure of the code which makes it easier to understand and extend In this section we will focus on creating dialogs that allow the user to input parameters graphically in the program Object oriented programming Software engineering is a difficult field As programs grow they become harder and harder to grasp for the developer This problem is not new and has sometimes been know as the tar pit Many attempts have been made to mitigate the difficulties Most often they consist in finding useful abstractions that allow the developer to manipulate larger ideas rather than their software implementation Code re use is paramount for good software development It reduces the number of code lines required to read and understand and allows to identify large operations in the code Functions and procedures have been invented to avoid copy and pasting code and hide the low level details of an operation Object oriented programming allows yet more modularity and abstraction Objects attributes
123. ntical except that the text is not editable HTMLEditor Suitable for HTML string traits Default for HTML Optional parameters format_text 1 9 The Predefined Trait Editor Factories 55 TraitsUI 4 User Manual Release 4 6 0 dev153 Font style Regular OW UD I O ii e Regular Arial Black Italic 2 O Arial Narrow Bold O Arial Rounded MT Boh Bold Italic O Arial Unicode MS T Baby Kruffy O Baskerville Old Face Effects Sample C Strikeout C Underline AaBbyyzz Color Black v Script Western v Fig 1 33 Figure 33 Example font dialog box for Microsoft Windows The editor generated by HTMLEditor interprets and displays text as HTML It does not support the user editing the text that it displays It generates the same type of editor regardless of the style specified Figure 34 shows an HTML editor in the upper pane with a code editor in the lower pane displaying the uninterpreted text Note HTML support is limited in the wx Widgets toolkit The set of tags supported by the wx Widgets implementation of the HTML editor is a subset of the HTML 3 2 standard It does not support style sheets or complex formatting Refer to the wx Widgets documentation for details If the format_text argument is True then the HTML editor supports basic implicit formatting which it converts to HTML before passing the text to the HTML interpreter The imp
124. numeration editor strips the characters up to and including the colon It assumes that all the items have the colon in the same position therefore if some of your tags have multiple digits you should use zeros to pad the items that have fewer digits 1 9 The Predefined Trait Editor Factories 53 TraitsUI 4 User Manual Release 4 6 0 dev153 FileEditor Suitable for File Default for File Optional parameters entries filter filter_name reload_name truncate_ext dclick_name A file editor enables the user to display a File trait or set it to some file in the local system hierarchy The styles of this editor are shown in Figure 31 Simple Cr synienthought trunk enthought traits Simple with History C svnienthoughtitrunk enthought traits_3 0 ee P enthought A traits J Custom _ init__ py a k init nwr bs lt ill Ce E P enthought A D traits a Custom with Filter 2 _ init__ py 41 1 entha nnht traiks enn infa gt 4 iili 7 Text C swnienthought trunk enthought traits_3 0 enthought ReadOnly Crsyvnjenthoughttrunkenthought traits 3 0 enthought Fig 1 31 Figure 31 File editor styles The default version of the simply style displays a text box and a Browse button Clicking Browse opens a platform specific file selection dialog box If you specify the entries keyword parameter with an integer value to the factory function the simple style is a combo box and a button labe
125. o synchronize with the user s current selection For example you can enable or disable menu items or toolbar icons depending on which item is selected The synchronization is two way you can set the attribute referenced by selected to force the table to select a particular item You can use the selected_indices parameter to specify the name of a trait attribute in the current context to synchronize with the indices of the table editor selection The content of the selection depends on the selection_mode value e cell The selection is a tuple of the form object column_name where object is the object contains the selected cell and column_name is the name of the column the cell is in If there is no selection the tuple is None e cells The selection is a list of tuples of the form object column_name with one tuple for each selected cell in order from top to bottom and left to right If there is no selection the list is empty e column The selection is the name of the selected column or the empty string if there is no selection e columns The selection is a list containing the names of the selected columns in order from left to right If there is no selection the list is empty e row The selection is either the selected object or None if nothing is selected in the table e rows The selection is a list of the selected objects in ascending row order If there is no selection the list is empty The on_select and on_d
126. ogram from traits etsconfig api import ETSConfig ETSConfig toolkit wx 2 The user can specify a toolkit flag on the command line of the program 3 The user can define a value for the ETS_TOOLKIT environment variable 1 2 3 Structure of this Manual The intent of this guide is to present the capabilities of the TraitsUI package in usable increments so that you can create and display gradually more sophisticated interfaces from one chapter to the next e The View and Its Building Blocks Customizing a View and Advanced View Concepts show how to construct and display views from the simple to the elaborate while leaving such details as GUI logic and widget selection to system defaults e Controlling the Interface the Handler explains how to use the Handler class to implement custom GUI behav iors as well as menus and toolbars e TraitsUI Themes described how to customize the appearance of GUIs through themes e Introduction to Trait Editor Factories and The Predefined Trait Editor Factories show how to control GUI widget selection by means of trait editors e Tips Tricks and Gotchas covers miscellaneous additional topics 1 2 Introduction 3 TraitsUI 4 User Manual Release 4 6 0 dev153 e Further reference materials including a Appendix I Glossary of Terms and an API summary for the TraitsUI classes covered in this Manual are located in the Appendices 1 3 The View and Its Building Blocks
127. onal parameters auto_set An editor generated by CompoundEditor consists of a combination of the editors for trait types that compose the compound trait The widgets for the compound editor are of the style specified for the compound editor simple custom etc The editors shown in Figure 28 are for the following trait whose value can be an integer between 1 and 6 or any of the letters a through f compound_trait Trait l Range 1 6 a b c d Te f Simple F fe i 0 3 cg We 4 Be Custom a ine BE SE i D E Fig 1 28 Figure 28 Example compound editor styles The auto_set keyword parameter is a Boolean value indicating whether the trait being edited should be updated with every keystroke True or only when the editor loses focus i e when the user tabs away from it or closes the window False The default value of this parameter is True CSVListEditor Suitable for lists of simple data types Default for none Optional parameters auto_set enter_set ignore_trailing_sep sep This editor provides a line of text for editing a list of certain simple data types The following List traits can be edited by a CSVListEditor 50 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 e List Int e List Float e List Str e List Enum string1 string2 efc e List Range low low value or trait name high high value or trait
128. or NoButtons can be useful for overriding an explicit value for buttons You can also specify buttons to achieve the same effect Setting the buttons attribute to an empty list has the same effect as not defining it at all It is also possible to define custom buttons and add them to the buttons list see Custom Command Buttons for details 16 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 4 Customizing a View 17 TraitsUI 4 User Manual Release 4 6 0 dev153 1 4 3 Other View Attributes Attributes of View by category item_theme label_theme resizable scrollable statusbar style title width e X y Category Attributes Description Window display These attributes control the visual e dock properties of the window itself re e height gardless of its content e icon e image Command close_result handler key_bindings menubar model_view on_apply toolbar updated TraitsUI menus and toolbars are gen erally implemented in conjunction with custom Handlers see Menus and Menu Bars for details The key_bindings attribute references the set of global key bindings for the view Content content drop_class export imports object The content attribute is the top level Group object for the view The object attribute is the object being edited The imports and drop_class attributes control what objects can be dragged and dropped on t
129. or TableEditor 121 TraitsUI 4 User Manual Release 4 6 0 dev153 3 2 TextEditor TitleEditor TreeEditor TupleEditor Advanced Demos Adapted TreeEditor Apply Revert Handler Table read only auto edit table column TabularEditor auto update DateEditor Dynamic EnumEditor Dynamic Range Editor Dynamic Views HDFS5 Tree History Invalid state handling ListStrEditor ListEditor ListEditor notebook tabs MVC Multi selection string list Multithread Multithread 2 NumPy array TabularEditor NumPy Array ViewEditor Popup Dialog Property List ScrubberEditor Settable cached property Statusbar StringListEditor TableEditor with checkbox column TableEditor with context menu TableEditor with live search and cell 122 Chapter 3 TraitsUI 4 Demos TraitsUI 4 User Manual Release 4 6 0 dev153 TabularEditor e TimeEditor 3 2 Advanced Demos 123 TraitsUI 4 User Manual Release 4 6 0 dev153 124 Chapter 3 TraitsUI 4 Demos CHAPTER 4 Indices and tables e genindex e search 125 TraitsUI 4 User Manual Release 4 6 0 dev153 126 Chapier 4 Indices and tables Index A ApplyButton 15 attribute 97 attributes Group 10 Item 6 View 16 B buttons attribute 14 examples 15 standard 15 C CancelButton 15 class attribute 97 close_result attribute 18 columns attribute 10 command button 97 configure_traits default
130. ore user friendly The following section will focus on making interactive programs where the user uses the graphical interface to interact with it in a continuous way 2 1 2 From graphical to interactive In an interactive application the program responds to user interaction This requires a slight paradigm shift in our programming methods Object oriented GUIs and event loops In a GUI application the order in which the different parts of the program are executed is imposed by the user unlike in a numerical algorithm for instance where the developer chooses the order of execution of his program An event loop allows the programmer to develop an application in which each user action triggers an event by stacking the user created events on a queue and processing them in the order in which the appeared A complex GUI is made of a large numbers of graphical elements called widgets e g text boxes check boxes buttons menus Each of these widgets has specific behaviors associated with user interaction modifying the content of a text box clicking on a button opening a menu It is natural to use objects to represent the widgets with their behavior being set in the object s methods Dialogs populated with widgets are automatically created by traitsUI in the configure_traits call traitsUI allow the developer to not worry about widgets but to deal only with objects and their attributes This is a fabulous gain as the widgets no
131. oup class 5 As with Views it is possible for a Group to contain objects of more than one type but it is not recommended 10 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 3 The View and Its Building Blocks 11 TraitsUI 4 User Manual Release 4 6 0 dev153 Atiributes of Group by category Category Attributes Description Content biect The object attribute references the objec object whose traits are being edited content by members of the group by default this is object but could be another object in the current context The content attribute is a list of elements in the group Display format columns e dock dock_theme export group_theme image item_theme label label_theme layout orientation padding selected show_border show_labels show_left springy style These attributes define display op tions for the group as a whole Visibility and status enabled_when visible_when defined_when These attributes work similarly to the attributes of the same names on the Item class hel User help chay help_id The help text is used by the default help handler only if the group is the only top level group for the current View For example suppose help text is defined for a Group called group1 The following View shows this text in its help window View group1 The following two do not View groupl group2 View Group group1
132. own in Figure 21 Example 14 Demonstration of array editors array_editor py Example of using array editors import numpy as np from traits api import HasPrivateTraits Array from traitsui api import View ArrayEditor Item from traitsui menu import NoButtons class ArrayEditorTest HasPrivateTraits three Array np int 3 3 four Array np float 4 4 editor ArrayEditor width 50 view View Item thr label 3x3 Integer Item three 1 9 The Predefined Trait Editor Factories 43 TraitsUI 4 User Manual Release 4 6 0 dev153 3x3 Integer Integer Read only 4x4 Float Float Read only Fig 1 21 Figure 21 Array editors 44 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 label Integer Read only style readonly F Item four label 4x4 Float F Item four label Float Read only style readonly buttons NoButtons resizable True if name _ main rs ArrayEditorTest configure_traits BooleanEditor Suitable for Bool CBool Default for Bool CBool Optional parameters mapping BooleanEditor is one of the simplest of the built in editor factories in the TraitsUI package It is used exclusively to edit and display Boolean i e True False traits In the simple and custom styles it generates a checkbox In the text style the editor
133. r styles The text style is an editable text field if the user enters a value that is not in enumerated set the background of the field turns red to indicate an error You can specify a function to evaluate text input using the evaluate parameter The read only style is the value of the trait as static text If the trait attribute that is being edited is not an enumeration you must specify either the trait attribute with the name parameter or the set of values to display with the values parameter The name parameter can be an extended trait name The values parameter can be a list tuple or dictionary or a mapped trait By default an enumeration editor sorts its values alphabetically To specify a different order for the items give it a mapping from the normal values to ones with a numeric tag The enumeration editor sorts the values based on the numeric tags and then strips out the tags Example 15 Enumeration editor with mapped values enum_editor py Example of using an enumeration editor from traits api import HasTraits Enum from traitsui api import EnumEditor Class EnumExample HasTraits priority Enum Medium Highest HIgh Medium Low Lowest view View Item name priority editor EnumEditor values Highest 1l Highest High 3 2s HIOA Medium 3 Medium Low 4 Low Lowest S Lowest The e
134. ra object which in our real world example is a camera interfaced to python through the ctypes 5 module and show how to open a dialog to edit its properties code snippet 1 from traits api import x from traitsui api import x class Camera HasTraits nmn Camera object nnm gain Enum 1 2 3 desc the gain index of the camera label gain exposure CInt 10 desc the exposure time in ms label Exposure def capture self Captures an image on the camera and returns it print capturing an image at i ms exposure gain i self exposure self gain if name __main_ camera Camera camera configure_traits camera capture The camera configure_traits call in the above example opens a dialog that allows the user to modify the camera object s attributes 38 Exposure 10 aji properties gain 1 X This dialog forms a graphical representation of our camera object We will see that it can be embedded in GUI panels to build more complex GUIs that allow us to control many objects We will build our application around objects and their graphical representation as this mapping of the code to the GUI helps the developer to understand the code Displaying several objects in the same panel We now know how to build a dialog from objects If we want to build a complex application we are likely to have several objects for instanc
135. raits editor A traits editor is the view associated with a trait that allows the user to graphically edit its value We can twist a bit the notion and simply use it to graphically represent the attribute This section involves a bit of wxPython code that may be hard to understand if you do not know wxPython but it will bring a lot of power and flexibility to how you use traits The reason it appears in this tutorial is that I wanted to insert a matplotlib in my traitsUI application It is not necessary to fully understand the code of this section to be able to read on I should stress that there already exists a plotting module that provides traits editors for plotting and that is very well integrated with traits chaco Making a traits editor from a MatPlotLib plot To use traits the developer does not need to know its internals However traits does not provide an editor for every need If we want to insert a powerful tool for plotting we have to get our hands a bit dirty and create our own traits editor This involves some wxPython coding as we need to translate a wxPython object to a traits editor by providing the corresponding API i e the standard way of building a traits editor so that the traits framework will know how to create the editor Traits editor are created by an editor factory that instantiates an editor class and passes it the object that the editor represents in its value attribute It calls the editor init method to c
136. reate the wx widget Here we create a wx figure canvas from a matplotlib figure using the matplotlib wx backend Instead of displaying this widget we set its control as the control attribute of the editor TraitsUI takes care of displaying and positioning the editor code snippet 8 import wx import matplotlib We want matplotlib to use a wxPython backend matplotlib use WxXAgg from matplotlib backends backend_wxagg import FigureCanvasWxAgg as FigureCanvas from matplotlib figure import Figure from matplotlib backends backend_wx import NavigationToolbar2Wx from traits api import Any Instance from traitsui wx editor import Editor from traitsui wx basic_editor_factory import BasicEditorFactory class _MPLFigureEditor Editor 7 chaco http code enthought com chaco 2 1 Writing a graphical application for scientific programming using TraitsUI 4 111 TraitsUI 4 User Manual Release 4 6 0 dev153 scrollable True def init self parent self control self _create_canvas parent self set_tooltip def update_editor self pass def _create_canvas self parent mun Create the MPL canvas The panel lets us add additional controls panel wx Panel parent 1 style wx CLIP_CHILDREN sizer wx BoxSizer wx VERTICAL panel SetSizer sizer matplotlib commands to create a canvas mpl_control FigureCanvas panel 1 self value sizer Add mpl_control 1 wx LEFT wx TOP
137. resulting widgets arai If an Item s label attribute is specified i ale but not its name the value of label eer NEDA is displayed as a simple non editable abe string This feature can be useful for Raber theme displaying comments or instructions l padding in a TraitsUI window e resizable e show_label springy width Content format In some cases it can be desirable to e format_str apply special formatting to a widget s contents rather than to the widget it self Examples of such formatting might include rounding a floating point value to two decimal places or capitalizing all letter characters in a license plate number Widget override editor style These attributes override the wid get that is automatically selected by TraitsUI These options are discussed in Introduction to Trait Editor Facto ries and The Predefined Trait Editor Factories Visibility and status enabled_when visible_when defined_when has_focus Use these attributes to create a simple form of a dynamic GUI which alters the display in response to changes in the data it contains More sophisti cated dynamic behavior can be im plemented using a custom Handler see Controlling the Interface the Handler User help tooltip help help_id These attributes provide guidance to the user in using the user interface If the help attribute is not defined for an Item a system generated message is used instead The help_i
138. rious levels mixed_styles py Example of using editor styles at various levels from traits api import HasTraits Str Enum from traitsui api import View Group Item class MixedStyles HasTraits first_name Str last_name Str department Enum Business Research Admin position_type Enum Full Time Part Time Contract traits_view View Group Item name first_name Item name last_name Group Item name department Item name position_type style custom style simple title Mixed Styles style readonly ms MixedStyles first_name Sam last_name Smith ms configure_traits Notice how the editor styles are set for each attribute e position_type at the Item level lines 19 20 e department at the Group level lines 18 and 21 e first_name and last_name at the View level lines 16 17 and 23 The resulting window demonstrates these precedence rules EJ Mixed Styles TE First name Sam Last name Smith Department Position type Full Time Part Time Contract Fig 1 20 Figure 20 User interface for Example 13 42 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 9 The Predefined Trait Editor Factories This chapter contains individual descriptions of the predefined trait editor factories provided by TraitsUI Most of these editor factories are straightforward and can be
139. rs on the table e fonts either a font for all entries or a mapping of column id to fonts 90 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 1 11 4 FlashEditor Suitable for string traits Enum string values Default for none FlashEditor generates a display of an Adobe Flash Video file using an ActiveX control if one is installed on the system This factory is available only on Microsoft Windows platforms The attribute being edited must have a value whose text representation is the name or URL of a Flash video file If the value is a Unicode string it must contain only characters that are valid for filenames or URLs 1 11 5 HistoryEditor Suitable for string traits Default for none Optional parameters entries HistoryEditor generates a combo box which allows the user to either enter a text string or select a value from a list of previously entered values The same control is used for all editor styles The entries parameter determines how many entries are preserved in the history list This type of control is used as part of the simple style of file editor see FileEditor 1 11 6 IEHTMLEditor Suitable for string traits Enum string values Default for none Optional parameters back forward home html page_loaded refresh search status stop title IEHTMLEditor generates a display of a web page using Microsoft Internet Explorer IE via ActiveX to render the page
140. s that are necessary to build the final application Each section is in itself independent of the following ones The complete beginner trying to use this as an introduction should not expect to understand all the details in a first pass The author s experience while working on several projects in various physics labs is that code tends to be created in an organic way by different people with various levels of qualification in computer development and that it rapidly decays to a disorganized and hard to maintain code base This tutorial tries to prevent this by building an application shaped for modularity and readability 1 python tutorial http docs python org tut tut html 2 The scipy website http www scipy org 3 The matplotlib website http matplotlib sourceforge net 4 The traits and traitsUI user guide http code enthought com traits 101 TraitsUI 4 User Manual Release 4 6 0 dev153 2 1 1 From objects to dialogs using traitsUI Creating user interfaces directly through a toolkit is a time consuming process It is also a process that does not integrate well in the scientific computing work flow as during the elaboration of algorithms and data flow the objects that are represented in the GUI are likely to change often Visual computing where the programmer creates first a graphical interface and then writes the callbacks of the graph ical objects gives rise to a slow development cycle as the work flow is ce
141. show_left True A Node Type with Children To define a node type that has children set the children attribute of TreeNode to the extended name of a trait on the object that it is a node for the named trait contains a list of the node s children In Example 16 the following lines define the node type for the node that contains the departments of a company The node type is for instances of Company and departments is a trait attribute of Company TreeNode node_for Company auto_open True children departments label Departments view no_view add Department Setting the Label of a Tree Node The label attribute of Tree Node can work in either of two ways as a trait attribute name or as a literal string If the value is a simple string it is interpreted as the extended trait name of an attribute on the object that the node is for whose value is used as the label This approach is used in the code snippet in A Node Type without Children If the value is a string that begins with an equals sign the rest of the string is used as the literal label This approach is used in the code snippet in A Node Type with Children You can also specify a callable to format the label of the node using the formatter attribute of TreeNode 86 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Defining Operations on Nodes You can use var
142. single View can be used to implement any of these options simply by modifying its kind attribute There are seven possible values of kind e modal e live livemodal e nonmodal e wizard e panel e subpanel 1 4 Customizing a View 13 TraitsUI 4 User Manual Release 4 6 0 dev153 These alternatives are described below If the kind attribute of a View object is not specified the default value is modal Stand alone Windows The behavior of a stand alone TraitsUI window can vary over two significant degrees of freedom First it can be modal meaning that when the window appears all other GUI interaction is suspended until the window is closed if it is not modal then both the window and the rest of the GUI remain active and responsive Second it can be live meaning that any changes that the user makes to data in the window is applied directly and immediately to the underlying model object or objects otherwise the changes are made to a copy of the model data and are only copied to the model when the user commits them usually by clicking an OK or Apply button see Command Buttons the buttons Attribute The four possible combinations of these behaviors correspond to four of the possible values of the kind attribute of the View object as shown in the following table Matrix of TraitsUI windows not modal modal not live nonmodal modal live live livemodal
143. t self info info object status run script def edit_bindings self info info object status edit bindings key_bindings edit_traits class KBCodeExample HasPrivateTraits code Code status Str kb Button label Edit Key Bindings view View Group Item code style custom resizable True Item status style readonly kb orientation vertical show_labels False dy id KBCodeExample key_bindings key_bindings title Code Editor With Key Bindings resizable True handler CodeHandler 1 10 Advanced Trait Editors 73 TraitsUI 4 User Manual Release 4 6 0 dev153 def _kb_fired self event key_bindings edit_traits if name main bis KBCodeExample configure_traits 1 10 5 TableEditor Suitable for List nstanceType Default for none Required parameters columns or columns_name Optional parameters See Traits API Reference traitsui wx table_editor ToolkitEditorFactory attributes TableEditor generates an editor that displays instances in a list as rows in a table with attributes of the instances as values in columns You must specify the columns in the table Optionally you can provide filters for filtering the set of displayed items and you can specify a wide variety of options for interacting with and formatting the table View No fiter Name Age Mike 34 555 2222 Dave 42 555 3333
144. t contain the low and high limit values use Jow_label high_label and label_width to specify labels for the limits 1 9 The Predefined Trait Editor Factories 65 TraitsUI 4 User Manual Release 4 6 0 dev153 RGBColorEditor Suitable for RGBColor Default for RGBColor Optional parameters mapped Editors generated by RGBColorEditor are identical in appearance to those generated by ColorEditor but they are used for RGBColor traits See ColorEditor for details SetEditor Suitable for List Default for none Required parameters Either values or name Optional parameters can_move_all left_column_title object ordered right_column_title In the editors generated by SetEditor the user can select a subset of items from a larger set The two lists are displayed in list boxes with the candidate set on the left and the selected set on the right The user moves an item from one set to the other by selecting the item and clicking a direction button gt for left to right and lt for right to left Additional buttons can be displayed depending on two Boolean parameters e If can_move_all is True additional buttons appear whose function is to move all items from one side to the other gt gt for left to right and lt lt for right to left e If ordered is True additional buttons appear labeled Move up and Move down which affect the position of the selected item within the set in the right list box Availabl
145. t ignores the key press A key binding editor is a separate dialog box that displays the string representation of each key code and a description of the corresponding method The user can click a text box and then press a key or key combination to associate that key press with s Update Key Bindings C i sewa a a a method Fig 1 50 Figure 50 Key binding editor dialog box The following code example creates a user interface containing a code editor with associated key bindings and a button that invokes the key binding editor 72 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Example 17 Code editor with key binding editor key_bindings py Example of a code editor with a key bindings editor from traits api import Button Code HasPrivateTraits Str from traitsui api import View Item Group Handler CodeEditor from traitsui key_ bindings import KeyBinding KeyBindings key_bindings KeyBindings KeyBinding bindingl TEER si description Save to a file method_name save_file KeyBinding bindingl Ctrl r description Run script method_name run_script KeyBinding bindingl eerL k description Edit key bindings method_name edit_bindings TraitsUI Handler class for bound methods class CodeHandler Handler def save_file self info info object status save file def run_scrip
146. t loop using the GUI invoke_later call That way the GUI will apply your instructions when it has time Recent versions of the TraitsUI module post October 2006 propagate the changes you make to a HasTraits object to its representation in a thread safe way However it is important to have in mind that modifying an object with a graphical representation is likely to trigger race conditions as it might be modified by the graphical toolkit while you are accessing it Here is an example of code inserting the modification to traits objects by hand in the event loop code snippet 7 from threading import Thread from time import sleep from traits api import x from traitsui api import View Item ButtonEditor class TextDisplay HasTraits string String view View Item string show_label False springy True style custom class CaptureThread Thread def run self self display string Camera started n self display string n_img 0 while not self wants_abort sleep 5 n_img 1 self display string d image captured n n_img self display string self display string Camera stopped n self display string class Camera HasTraits start_stop_capture Button display Instance TextDisplay 2 1 Writing a graphical application for scientific programming using TraitsUI 4 109 TraitsUI 4 User Manual Release 4 6 0 dev153 capture_thread Instance CaptureThre
147. tains the module d If path klass and module are not defined the editor searches for an images subdirectory of the traitsui wx package e If none of the above paths are defined the editor searches for an images directory that is a sibling of the directory from which the application was run InstanceEditor Suitable for Instance Property self ThisClass This Default for Instance self ThisClass This Optional parameters cachable editable id kind label name object orientation values view The editors generated by InstanceEditor enable the user to select an instance or edit an instance or both Editing a Single Instance In the simplest case the user can modify the trait attributes of an instance assigned to a trait attribute but cannot modify which instance is assigned Name oe Smith j Plumber Custom S Age 21 65 34 Registered voter V Text lt _main_ SampleClass object at OxO0D9F8A0 ReadOnly lt __main__ SampleClass object at Ox00D9F8A0 gt Fig 1 36 Figure 36 Editor styles for instances 1 9 The Predefined Trait Editor Factories 59 TraitsUI 4 User Manual Release 4 6 0 dev153 The custom style displays a user interface panel for editing the trait attributes of the instance The simple style displays a button which when clicked opens a window containing a user interface for the instance The kind parameter specifies the kind of window to open see Stand alone Win
148. tal range represented by a slider For example if the range is from 2 to 2 a value of 0 is represented by a bar covering the left half of the control area as shown in Figure 59 1 11 Extra Trait Editor Factories 93 TraitsUI 4 User Manual Release 4 6 0 dev153 Fig 1 59 Figure 59 Themed slider without focus and with focus 1 11 12 ThemedTextEditor Suitable for Str String Unicode CStr CUnicode and any trait whose value is a string Default for none Optional parameters auto_set enter_set evaluate evaluate_name mapping multi_line password theme The ThemedTextEditor factory generates a text editor that is formatted according to a specified theme If no theme is specified the editor uses the theme if any specified by the surrounding Group or View Thus there is no default theme All editor styles have the same appearance except the read only style which is not editable Fig 1 60 Figure 60 Themed text editor without focus and with focus 1 11 13 ThemedVerticalNotebookEditor Suitable for Lists of Instances Default for none Optional parameters closed_theme double_click open_theme page_name multiple_open scrollable view The Themed VerticalNotebookEditor factory generates a notebook editor containing tabs that can be vertically expanded or collapsed It can be used for lists of instances similarly to the ListEditor factory with the use_notebook parameter You can specify
149. tances of TreeNode or of subclasses of TreeNode Acme Labs Inc a Departments Name Mike aj G H Title sr Marketing Analy fF l Dave Susan Jason El 15 Employees Dave Susan Mike Betty Jason C0 Betty Fh 536 1057 D Engineering He Fig 1 54 Figure 54 Tree editor The following example shows the code that produces the editor shown in Figure 54 Example 18 Code for example tree editor tree_editor py Example of a tree editor from traits api import HasTraits Str Regex List Instance from traitsui api import TreeEditor TreeNode View Item VSplit HGroup Handler Group from traitsui menu import Menu Action Separator from traitsui wx tree_editor import NewAction CopyAction CutAction PasteAction DeleteAction RenameAction 82 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 DATA CLASSES class Employee HasTraits name Str lt unknown gt title Str phone Regex regex r d d d d d d d def default_title self self title Senior Engineer class Department HasTraits name Str lt unknown gt employees List Employee class Company HasTraits name Str lt unknown gt departments List Department employees List Employee class Owner HasTraits name Str lt unknown gt compan
150. tation vertical show_labels True show_left True title Company Structure id traitsui tests tree_editor_test dock horizontal drop_class HasTraits handler TreeHandler buttons Undo TOK Cancel resizable True 1 10 Advanced Trait Editors 85 TraitsUI 4 User Manual Release 4 6 0 dev153 width 3 height 3 iE name _ main ae owner configure_traits view view Defining Nodes For details on the attributes of the TreeNode class refer to the Traits API Reference You must specify the classes whose instances the node type applies to Use the node_for attribute of TreeNode to specify a list of classes often this list contains only one class You can have more than one node type that applies to a particular class in this case each object of that class is represented by multiple nodes one for each applicable node type In Figure 54 one Company object is represented by the nodes labeled Acme Labs Inc Departments and Employees A Node Type without Children To define a node type without children set the children attribute of TreeNode to the empty string In Example 16 the following lines define the node type for the node that displays the company name with no children TreeNode node_for Company auto_open True children label name view View Group name orientation vertical
151. te The add attribute alone is not enough to create objects Specifying the add attribute makes it possible for objects of the specified classes to be created but by itself it does not provide a way for the user to do so In the code snippet in the preceding section Shortcut Menus on Nodes NewAction in the Menu constructor call defines a New gt Employee menu item that creates Employee objects In the example tree editor users can create new employees using the New gt Employee shortcut menu item and they can drag an employee node and drop it on a department node The corresponding object becomes a member of the appropriate list You can specify the label that appears on the New submenu when adding a particular type of object using the name attribute of TreeNode Note that you set this attribute on the tree node type that will be added by the menu item not the node type that contains the menu item For example to change New gt Employee to New gt Worker set name Worker on the tree node whose node_for value contains Employee If this attribute is not set the class name is used You can determine whether a node or its children can be copied renamed or deleted by setting the following attributes on TreeNode 1 10 Advanced Trait Editors 87 TraitsUI 4 User Manual Release 4 6 0 dev153 Attribute If True the can be copy object s children copied delete object s children d
152. that the terms view and View are distinct for the purposes of this document The former refers to the component of the MVC design pattern the latter is a TraitsUI construct The Controller Handler Subclasses and Objects The controller for a Traits based application is defined in terms of the Handler class Specifically the relationship between any given View instance and the underlying model is managed by an instance of the Handler class For simple interfaces the Handler can be implicit For example none of the examples in the first four chapters includes or requires any specific Handler code they are managed by a default Handler that performs the basic operations of 1 A third type of content object Include is discussed briefly in Include Objects but presently is not commonly used 2 Not to be confused with the TraitHandler class of the Traits package which enforces type validation 2 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 window initialization transfer of data between GUI and model and window closing Thus a programmer new to TraitsUI need not be concerned with Handlers at all Nonetheless custom handlers can be a powerful tool for building sophisticated application interfaces as discussed in Controlling the Interface the Handler 1 2 2 Toolkit Selection The TraitsUI package is designed to be toolkit independent Programs that use TraitsUI do not need to explicitly import or c
153. themes to use for the open and closed states of the tabs 94 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 ave chomsky O Fig 1 61 Figure 61 Themed vertical notebook with tabs for Person instances closed Mike Wakowski Joe Higginbotham i Tomberringer Fig 1 62 Figure 62 Themed vertical notebook with one tab open 1 11 Extra Trait Editor Factories 95 TraitsUI 4 User Manual Release 4 6 0 dev153 1 12 Tips Tricks and Gotchas 1 12 1 Getting and Setting Model View Elements For some applications it can be necessary to retrieve or manipulate the View objects associated with a given model object The HasTraits class defines two methods for this purpose trait_views and trait_view trait_views The trait_views method when called without arguments returns a list containing the names of all Views defined in the object s class For example if sam is an object of type SimpleEmployee3 from Example 6 the method call sam trait_views returns the list all_view traits_view Alternatively a call to trait_views view_element_type returns a list of all named instances of class view_element_type defined in the object s class The possible values of view_element_type are e View e Group e Item e ViewElement e ViewSubElement Thus calling trait_views View is identical to calling trait_views Note that t
154. to be displayed is determined by the image parameter or by the value of the trait attribute being edited if image is not specified In either case the value must be a PyFace ImageResource pyface api ImageResource or a string that can be converted to one If image is specified then the type and value of the trait attribute being edited are irrelevant and are ignored For the Qt backend scale preserve_aspect_ratio allow_upscaling and allow_clipping control whether the image should be scaled or not and how to perform that scaling 1 11 8 LEDEditor Suitable for numeric traits Default for none Optional parameters alignment format_str LEDEditor generates a display that resembles a digital display using light emitting diodes All styles of this editor are the same and are read only The alignment parameter can be left center or right to indicate how the value should be aligned within the display The default is right alignment Fig 1 56 Figure 56 LED Editor with right alignment 1 11 9 ThemedButtonEditor Suitable for Event Default for none Optional parameters label theme down_theme hover_theme disabled_theme image position spac ing view The ThemedButtonEditor factory generates a button that is formatted according to specified or default themes All editor styles have the same appearance The theme related parameters determine the appearance of the button in various states
155. to update the canvas if you made modifications to the figure The matplotlib user guide details how this object can be used for plotting 2 1 5 Putting it all together a sample application The real world problem that motivated the writing of this tutorial is an application that retrieves data from a camera processes it and displays results and controls to the user We now have all the tools to build such an application This section gives the code of a skeleton of this application This application actually controls a camera on a physics experiment Bose Einstein condensation at the university of Toronto The reason I am providing this code is to give an example to study of how a full blown application can be built This code can be found in the tutorial s zip file it is the file application py e The camera will be built as an object Its real attributes exposure time gain will be represented as the object s attributes and exposed through traitsUI e The continuous acquisition processing user interaction will be handled by appropriate threads as discussed in section 2 3 e The plotting of the results will be done through the MPLWidget object 2 1 Writing a graphical application for scientific programming using TraitsUI 4 113 TraitsUI 4 User Manual Release 4 6 0 dev153 The imports The MPLFigureEditor is imported from the last example from threading import Thread from time import sleep from traits
156. tor values opt1 opt2 opt3 J The descriptions of trait editor factories in The Predefined Trait Editor Factories include a list of required and optional initialization keywords for each editor 1 8 2 Specifying an Editor Style In TraitsUI any given trait editor can be generated in one or more of four different styles simple custom text or readonly These styles which are described in general terms below represent different flavors of data display so that a given trait editor can look completely different in one style than in another However different trait editors displayed in the same style usually have noticeable characteristics in common This is useful because editor style 1 8 Introduction to Trait Editor Factories 39 TraitsUI 4 User Manual Release 4 6 0 dev153 unlike individual editors can be set at the Group or View level not just at the Item level This point is discussed further in Using Editor Styles The simple Style The simple editor style is designed to be as functional as possible while requiring minimal space within the window In simple style most of the Traits UI editors take up only a single line of space in the window in which they are embedded In some cases such as the text editor and Boolean editor see Basic Trait Editor Factories the single line is fully sufficient In others such as the plain color editor and the enumeration editor a more detailed interface
157. ts or edit_traits on a HasTraits object or by calling the ui method on the View object e View context You can pass a context to any of the methods for displaying views which is a dictionary of labels and objects In the default case this dictionary contains only one object referenced as object but you can define contexts that contain multiple objects e Include objects You can use an Include object as a placeholder for view items defined elsewhere 1 5 1 Internal Views In the examples thus far the View objects have been external That is to say they have been defined outside the model HasTraits object or objects that they are used to display This approach is in keeping with the separation of the two concepts prescribed by the MVC design pattern There are cases in which it is useful to define a View within a HasTraits class In particular it can be useful to associate one or more Views with a particular type of object so that they can be incorporated into other parts of the application with little or no additional programming Further a View that is defined within a model class is inherited by any subclasses of that class a phenomenon called visual inheritance Defining a Default View It is easy to define a default view for a HasTraits class simply create a View attribute called traits_view for that class Consider the following variation on Example 3 Example 5 Using configure_traits with a default View object
158. tsUI Test configure_traits This example uses the following theme related items The group_theme item_theme and label_theme attributes are explicitly specified lines 24 to 26 e The Label constructor line 17 takes an optional second argument in this case GF6 which specifies the item_theme information for the Label object Label is a subclass of Item e The item for weight line 20 uses a ThemedTextKditor factory this isn t strictly necessary but illustrates the use of a themed editor factory For more information on themed editor factories refer to Extra Trait Editor Factories and to the Traits API Reference e The example contains an extra Group level line 16 and shows the results of two nested group_theme values G and GD0 The outermost group_theme value G specifies the gray background while the innermost group_theme value GD0 specifies the light gray rectangle drawn over it This combination demonstrates the automatic compositing of themes since the rounded rectangle is transparent except where the light gray band appears 36 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 e The theme data strings use the prefix to reference images from the default image library 1 8 Introduction to Trait Editor Factories The preceding code samples in this User Manual have been surprisingly simple considering the sophisticat
159. ttribute value 5 Otherwise the Python str function is called on the attribute value The readonly style The readonly editor style is usually identical in appearance to the text style except that the value appears as static text rather than in an editable box Fig 1 19 Figure 19 Read only style of enumeration editor This editor style is used to display data values without allowing the user to change them Using Editor Styles As discussed in Contents of a View and Customizing a View the Item Group and View objects of TraitsUI all have a style attribute The style of editor used to display the Items in a View is determined as follows 1 The editor style used to display a given Item is the value of its style attribute if specifically assigned Otherwise the editor style of the Group or View that contains the Item is used 2 The editor style of a Group is the value of its style attribute if assigned Otherwise it is the editor style of the Group or View that contains the Group 3 The editor style of a View is the value of its style attribute if specified and simple otherwise 1 8 Introduction to Trait Editor Factories 41 TraitsUI 4 User Manual Release 4 6 0 dev153 In other words editor style can be specified at the Item Group or View level and in case of conflicts the style of the smaller scope takes precedence For example consider the following script Example 13 Using editor styles at va
160. ull power requires you to move away from the procedural type of program ming most scientists are used to and think more in terms of objects and flow of information and control between them I have found that this paradigm shift although a bit hard has been incredibly rewarding in terms of my own productivity and my ability to write compact and readable code Good luck Acknowledgments I would like to thank the people on the enthought dev mailing list especially Prabhu Ramachandran and David Morrill for all the help they gave me and Janet Swisher for reviewing this document Big thanks go to enthought for developing the traits and traitsUI modules and making them open source Finally the python the numpy and the matplotlib community deserve many thanks for both writing such great software and being so helpful on the mailing lists References 2 1 Writing a graphical application for scientific programming using TraitsUI 4 119 TraitsUI 4 User Manual Release 4 6 0 dev153 120 Chapter 2 TraitsUI 4 Tutorials CHAPTER 3 TraitsUI 4 Demos This section contains links to a number of TraitsUI demos 3 1 Standard Editors BooleanKditor ButtonEditor CSVListEditor CheckListEditor CheckListEditor simple CodeEditor ColorEditor CompoundEditor DirectoryEditor EnumEditor FileEditor FontEditor HTMLEditor ImageEnumEditor InstanceEditor ListEditor RGBColorEditor RangeEditor SetEdit
161. used easily with little or no expertise on the part of the programmer or end user these are described in Basic Trait Editor Factories The section Advanced Trait Editors covers a smaller set of specialized editors that have more complex interfaces or that are designed to be used along with complex editors Note Examples are toolkit specific The exact appearance of the editors depends on the underlying GUI toolkit The screenshots and descriptions in this chapter are based on wx Windows Another supported GUI toolkit is Qt from TrollTech Rather than trying to memorize all the information in this chapter you might skim it to get a general idea of the available trait editors and their capabilities and use it as a reference thereafter 1 9 1 Basic Trait Editor Factories The editor factories described in the following sections are straightforward to use You can pass the editor object returned by the editor factory as the value of the editor keyword parameter when defining a trait ArrayEditor Suitable for 2 D Array 2 D CArray Default for Array CArray if 2 D Optional parameter width The editors generated by ArrayEditor provide text fields or static text for the read only style for each cell of a two dimensional Numeric array Only the simple and read only styles are supported by the wx Widgets implementation You can specify the width of the text fields with the width parameter The following code generates the editors sh
162. ute 10 show_border attribute 10 show_label attribute 6 show_labels attribute 10 show_left attribute 10 Spring class 8 springy attribute Group 10 Item 6 statusbar attribute 18 style attribute Group 10 Item 6 View 18 subclasses Group 12 Item 8 subpanel 14 98 window kind 13 T Tabbed 13 title attribute 18 toolbar attribute 18 toolkit environment variable 3 flag 3 selection 3 tooltip attribute 6 trait 98 trait attribute 98 trait type 98 Traits 98 traits _view attribute 21 TraitsUI 98 U ui 22 UndoButton 15 updated attribute 18 V VFlow 13 VFold 13 VGrid 13 VGroup 13 View 98 as MVC view 2 attributes 16 contents 5 context 18 customizing 13 default 19 external 18 22 internal 18 methods for displaying 22 multi object 23 multiple 21 object 4 5 ways of displaying 18 view 98 view in MVC 2 ViewElement 98 visible _when attribute Group 12 Item 6 VSplit 13 W widget 6 98 width attribute Item 6 View 18 windows panel 14 stand alone 14 subpanel 14 wizard 14 wizard 14 98 Index 129 TraitsUI 4 User Manual Release 4 6 0 dev153 window kind 13 wx 98 wxPython toolkit 3 X x attribute 18 Y y attribute 18 130 Index
163. vely through this style of editor ListStrEditor Suitable for ListStr or List of values mapped to strings Default for none 18 Tf a List is made up of HasTraits objects a table editor is used instead see TableEditor 62 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 Simple The Merchant of Venice The Merchant of Yenice Hamlet i 6 macBeth The Merchant of Venice 4dd Before Add After Delete Move Up Move Down Move to Top Readonly Move to Botkorn Fig 1 39 Figure 39 List editor showing context menu Dave Mke Joe Tom O Dick Harry Sally Fields Name Dave we 99 Phone 555 1212 Fig 1 40 Figure 40 Notebook list editor 1 9 The Predefined Trait Editor Factories 63 TraitsUI 4 User Manual Release 4 6 0 dev153 Optional parameters activated activated_index adapter adapter_name auto_add drag_move ed itable horizontal_lines images multi_select operations right_clicked right_clicked_index se lected selected_index title title_name ListStrEditor generates a list of selectable items corresponding to items in the underlying trait attribute All styles of the editor are the same The parameters to ListStrEditor control aspects of the behavior of the editor such as what operations it allows on list items whether items are editable and whether more than one can be selected at a
164. ven if the View specifies them 1 4 2 Command Buttons the buttons Attribute A common feature of many windows is a row of command buttons along the bottom of the frame These buttons have a fixed position outside any scrolled panels in the window and are thus always visible while the window is displayed They are usually used for window level commands such as committing or cancelling the changes made to the form data or displaying a help window 14 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 In TraitsUI these command buttons are specified by means of the View object s buttons attribute whose value is a list of buttons to display Consider the following variation on Example 3 Example 4 Using a View object with buttons configure_traits_view_buttons py Sample code to demonstrate configure_traits from traits api import HasTraits Str Int from traitsui api import View Item from traitsui menu import OKButton CancelButton class SimpleEmployee HasTraits first_name Str last_name Str department Str mployee_number Str salary Int viewl View Item name first_name Item name last_name Item name department buttons OKButton CancelButton sam SimpleEmployee sam configure_traits view view1 The resulting window has the same content as before but now two buttons are displayed at the bottom OK and Cancel
165. w statically is limiting so one can override the default_traits_view method of a HasTraits object The example above would be implemented as follows Example 5b Building a default View object with default_traits_view default_traits_view2 py Sample code to demonstrate the use of default_traits_view from traits api import HasTraits Str Int from traitsui api import View Item Group import traitsui class SimpleEmployee2 HasTraits first_name Str last_name Str department Str mployee_number Str salary Int def default_traits_view self return View Group Item name first_name Item name last_name Item name department label Personnel profile show_border True sam SimpleEmployee2 sam configure_traits 20 Chapter 1 TraitsUI 4 User Manual TraitsUI 4 User Manual Release 4 6 0 dev153 This pattern can be useful for situations where the layout of GUI elements depends on the state of the object For instance to populate the values of a CheckListEditor with items read in from a file it would be useful to build the default view this way Defining Multiple Views Within the Model Sometimes it is useful to have more than one pre defined view for a model class In the case of the SimpleEmployee class one might want to have both a public information view like the one above and an all information view One can do this by simpl
166. whether the file extension is removed from the returned file name It is False by default meaning that the filename is not modified before it is returned The dclick_name parameter is an extended trait name of a trait event which is fired when the user double clicks on a file name when using the custom style FontEditor Suitable for Font Default for Font A font editor enables the user to display a Font trait or edit it by selecting one of the fonts provided by the underlying GUI toolkit The four styles of this editor are shown in Figure 32 Simple 10 point Arial 10 point Arial Arial io Text 10 point Arial ReadOnly 10 point Arial Custom Fig 1 32 Figure 32 Font editor styles In the simple style the currently selected font appears in a display similar to a text box except that when the user clicks on it a platform specific dialog box appears with a detailed interface such as is shown in Figure 33 When the user clicks OK control returns to the editor which then displays the newly selected font In the custom style an abbreviated version of the font dialog box is displayed in line The user can either type the name of the font in the text box or use the two drop down lists to select a typeface and size In the text style the user must type the name of a font in the text box provided No validation is performed the user must enter the correct name of an available font The read only style is ide
167. with large arrays which do not work well with the editors generated by ArrayEditor All styles of the editor have the same appearance Index x y z a 0 0 6415 0 1716 0 3135 1 0 9506 0 9574 0 3325 2 0 9696 0 4612 0 916 3 0 0874 0 8570 0 4527 4 0 9208 0 3019 0 4016 5 0 4965 0 0899 0 0584 6 0 3133 0 7694 0 7709 7 0 3529 0 4122 0 4434 8 0 2343 0 0653 0 4604 9 0 3321 0 3810 0 7016 10 0 6647 0 1653 0 0380 11 0 5732 0 4490 0 4782 12 0 2916 0 7809 0 5600 13 0 8068 0 7893 0 1528 14 0 7558 0 7232 0 3891 15 U R959 0 9720 0 6558 yg Fig 1 55 Figure 55 Array view editor 1 11 3 DataFrameEditor Suitable for Pandas DataFrames Default for none Optional parameters formats show_index show_titles columns fonts selected selected_row se lectable activated activated_row clicked dclicked right_clicked right_dclicked column_clicked column_right_clicked editable operations DataFrameEditor generates a tabular display for a DataFrame It is suitable for use with large DataFrames All styles of the editor have the same appearance Many of the optional parameters are identical to those of the TabularEditor The following have special meaning for the DataFrameEditor e formats either a style formatting string for all entries or a dictonary mapping DataFrame columns to for matting strings e show_index whether or not to show the index as a column in the table e show_titles whether or not to show column heade
168. xt Read only Integer Small Range Size 0 16 Slider with text Radio buttons Text Static text box field Integer Medium Range Size 17 101 Slider with text Slider with text Text Static text box box field Integer Large Range Size gt 101 Spin box Spin box Text Static text field Floating Point Small Range Size lt Slider with text Slider with text Text Static text 100 0 box box field Floating Point Large Range Size gt 100 0 Large range slider Large range slider Text Static text field Slider with text field 1 as Coa ae 6 C41 C5 C8 E E Radio buttons z 3 7 C 10 4 Text le Static text 6 Spin box 5 Large range slider 10 000 lt 2 H c gt 100 000 19 000 iS ees pot bie hed aera Fig 1 42 Figure 42 Range editor widgets In the large range slider the arrows on either side of the slider move the editable range so that the user can move the slider more precisely to the desired value You can override the default widget for each type of editor using the mode parameter which can have the following values enum Radio buttons e text Text field auto The default widget as described in Table 8 slider Simple slider with text field xslider Large range slider with text field spinner Spin box with increment decrement buttons You can set the limits of the range dynamically using the Jow_name and high_name parameters to specify trait at tributes tha
169. y Instance Company INSTANCES jason Employee name Jason title Engineer phone 536 1057 mike Employee name Mike title Sr Marketing Analyst phone 536 1057 dave Employee name Dave title Sr Engineer phone 536 1057 susan Employee name Susan title Engineer phone 536 1057 betty Employee name Betty title Marketing Analyst owner Owner name wile company Company name Acme Labs Inc departments Department name Marketing mployees mike betty 1 10 Advanced Trait Editors 83 TraitsUI 4 User Manual Release 4 6 0 dev153 y Department name Engineering mployees dave susan jason d mployees dave susan mike betty jason View for objects that aren t edited no_view View Actions used by tree editor context menu def_title_action Action name Default title action object default dept_action Action name Department action handler employee_department editor object View used by tree editor mployee_view View VSplit HGroup 3 name HGroup 9 title HGroup phone id vsplit id traits doc example treeeditor dock vertical class TreeHandler Handler def employee_department self ditor
170. y CheckListEditor are shown in Figure 24 Note that in this case the cols parameter has been set to 4 Simple Ome ka Custom v one Two Three Four Text one three Readonk one three Fig 1 24 Figure 24 Checklist editor styles CodeEditor Suitable for Code Str String Default for Code Optional parameters auto_set The purpose of a code editor is to display and edit Code traits though it can be used with the Str and String trait types as well In the simple and custom styles which are identical for this editor the text is displayed in numbered non wrapping lines with a horizontal scrollbar The text style displays the trait value using a single scrolling line with special characters to represent line breaks The read only style is similar to the simple and custom styles except that the text is not editable 1 9 The Predefined Trait Editor Factories 47 TraitsUI 4 User Manual Release 4 6 0 dev153 1 import sys 2 3 sys print hello world Simple 1 import sys 2 3sys print kello world Custom Text import sysO Osys print hello world 1 import sys 2 ReadOnly 3 sys print hello world Fig 1 25 Figure 25 Code editor styles The auto_set keyword parameter is a Boolean value indicating whether the trait being edited should be updated with every keystroke True or only when the editor loses focus i e when the user tabs away from it or closes th
171. y adding a second View attribute Example 6 Defining multiple View objects in a HasTraits class multiple_views py Sample code to demonstrate the use of multiple views from traits api import HasTraits Str Int from traitsui api import View Item Group import traitsui class SimpleEmployee3 HasTraits first_name Str last_name Str department Str mployee_number Str salary Int traits_view View Group Item name first_name Item name last_name Item name department label Personnel profile show_border True all_view View Group Item name first_name Item name last_name Item name department Item name employee_number Item name salary label Personnel database entry show_border True sam SimpleEmployee3 sam configure_traits sam configure_traits view all_view As before a simple call to configure_traits for an object of this class produces a window based on the default View traits_view In order to use the alternate View use the same syntax as for an external view except that the View name is specified in single quotes to indicate that it is associated with the object rather than being a module level variable configure_traits view all_view Note that if more than one View is defined for a model class you must indicate which one is to be used as the default by naming it tr
Download Pdf Manuals
Related Search
Related Contents
Strebel SC-B Wall-Hung Condensing Boiler Zedmed User Manual Shot Navi ADVANCE2 FW 取扱説明書(PDFファイル)はこちら PowerFilm 5.3 Addendum Condition générale d`achats - Printemps Samsung SPF-105V Instrukcja obsługi Philips PR3731 Copyright © All rights reserved.
Failed to retrieve file