2016-07-09 22 views
0

Der folgende Code funktioniert nicht ändern:Wie Enum möglichen Werte

from traits.api import HasTraits, Enum 

class A(HasTraits): 

    enum = Enum(1,2,3) 

class B(A): 

    def __init__(self): 
     self.trait('enum').default_value = ['one','two','three'] 

b = B() 
b.configure_traits() 

Anstatt die Wahl von [ ‚ein‘, ‚zwei‘, ‚drei‘] in der Dropdown-Liste, es ist noch [1,2,3]. Gibt es eine Möglichkeit, einen Enum-Inhalt in irgendeiner Weise zu ändern, nachdem er einmal deklariert wurde?

Antwort

2

Wenn Sie den Wert des enum Eigenschaft ändern möchten, wenn Sie B von A Unterklasse, können Sie einfach die Eigenschaft neu zu definieren, wie so:

class B(A): 
    enum = Enum(['one', 'two', 'three']) 

Wenn Sie die Werte in der Lage sein wollen sich ändern Enum dynamisch, der Enum Konstruktor nimmt ein values Argument, das Sie den Namen eines anderen Merkmals übergeben können, das eine Sequenz wie eine List Eigenschaft enthält, die die Werte definiert, wie unten, und ändern Sie dann die Werte in dieser Liste oder die Sequenz in ihrer Gesamtheit in wie Sie es wünschen:

from traits.api import Enum, HasTraits, List 


class A(HasTraits): 
    values = List([1, 2, 3]) 
    enum = Enum(values='values') 


a = A() 
a.configure_traits() 
+0

'enum = Enum (Werte = 'Werte')' war genau das, was ich brauchte, es funktioniert perfekt. Ich bin noch nicht damit vertraut, Parameter als Bezeichnerketten für die späte Bindung zu übergeben! –

+0

http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

+0

@YvesSurrel - FYI Stack Overflow-Protokoll soll eine Antwort als akzeptiert markieren, wenn es Ihre Frage beantwortet. Für eine Erklärung des Grundes, sehen Sie bitte den Link, den ich gerade über gestern gepostet habe. –