Я новичок в python - извините, если моя терминология неверна. У меня есть класс, который наследует атрибуты Enthought Traits. Вот упрощенная версия:
from enthought.traits.api import HasTraits, Range
from enthought.traits.ui.api import View, Item
class GUIThing(HasTraits):
my_slider = Range(0.0, 0.6, 0.1)
my_slider._high = 0.7 # works; not what I need 'coz not instance-dependent
view = View( Item('my_slider') )
def __init__(self, arg1):
# Call the parent's __init__
HasTraits.__init__(self)
self.my_slider._high = arg1 # what I need; doesn't work
# -- Main program -----
top_range = 0.9
my_gui = GUIThing(top_range)
my_gui.configure_traits()
Это просто создает окно с ползункомв нем, первоначально изменяющимся от 0,0 до 0,6 с начальным значением 0,1. При создании экземпляра GUIThing я хочу изменить максимальное значение ползунка в зависимости от текущего значения top_range
. Однако строка
self.my_slider._high = arg1
приводит к
AttributeError: 'float' объект не имеет атрибута '_high'
Когда внутри __init__()
, self.my_slider
возвращает не объект ползунка, а текущее значение ползунка.
Что я делаю не так? Спасибо!
Редактировать:
Следующее также не работает:
class GUIThing(HasTraits):
def __init__(self, arg1):
# Call the parent's __init__
HasTraits.__init__(self)
self.my_slider = Range(0.0, arg1, 0.0)
view = View( Item('my_slider') )
Это был бы прямой способ сделать то, что я пытаюсь сделать, но это приводит к графическому интерфейсу, где вместо ползунка есть текстовое поле с надписью «enthought.traits.trait_types.Range object at 0xa61946c».Итак, проблема в том, что когда my_slider
создается внутри __init__()
, тогда «my_slider» означает сам объект(который не отображается должным образом через View ); но если my_slider
создается вне __init__()
, тогда "my_slider" означает текущее значение(число с плавающей точкой, которое предотвращает доступ к свойствам объекта) .
Не уверен, что это особенность свойств или я просто не знаю, как правильно инициализировать объекты.