Я новичок в 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' object has no attribute '_high'
Когда в __init__()
, self.my_slider
возвращает не объект слайдера, а текущее значение слайдера.
Что я делаю не так? Спасибо!
Edit:
Следующее также не работает:
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') )
Это был бы прямой способ сделать то, что я пытаюсь сделать, но это приводит к GUI, где вместо ползунка есть текстовое поле, которое гласит «enthought.traits.trait_types.Range object at 0xa61946c» , Таким образом, проблема в том, что когда my_slider
создается внутри __init__()
, тогда «my_slider» означает сам объект (который не отображается должным образом через View); но если my_slider
создается за пределами __init__()
, тогда «my_slider» означает текущее значение (число с плавающей запятой; которое запрещает доступ к свойствам объекта).
Не уверен, свойственно ли это чертам или я просто не знаю, как правильно инициализировать объекты.