2015-03-15 2 views
0

Привет Я пытаюсь собрать некоторые функции для выполнения общих задач с помощью объектно-ориентированной командной строки Veusz (https://github.com/jeremysanders/veusz/wiki/EmbeddingPython). VszPlot (x, y) должен создать начальный график во встроенном окне списков x по y. Затем я хочу иметь вторую функцию AddPlot (x, y), которая добавит новые данные в один и тот же встроенный график. VszPlot выглядит следующим образом:функции python объект veusz

def VszPlot(xval,yval): 
    #Create a default veusz graph. Visualise with option to save 
    import veusz.embed as veusz 

    # construct a Veusz embedded window 
    # many of these can be opened at any time   
    handle = veusz.Embedded('Graph') 

    # construct the plot by adding widgets 
    page = handle.Root.Add('page') 

    graph = page.Add('graph') 

    xy1 = graph.Add('xy',xData = xval, yData = yval) 
    xy1.MarkerFill.color.val = 'red' 

return handle 

def AddPlot(handle,xval,yval): 
    # try and do something to handle 
    handle.EnableToolbar() 

Это работает, но

def AddPlot(handle,xval,yval): 
    #try and do something to some property of an attribute. eg change colour of markers 
    handle.graph.xy1.MarkerFill.color.val = 'blue' 

, который будет работать, если применяется внутри VszPlot возвращает эту ошибку:

AttributeError: 'Embedded' объект не имеет атрибута 'графа'

Где мой атрибут графика ушел?

ответ

0

Это особый вопрос в Veusz. Когда вы пишете graph=page.Add('graph'), Veusz не знает имя, которое вы указали для переменной. Здесь новому графу присваивается имя по умолчанию «graph1». Когда вы перемещаете дерево с помощью «.», Вы должны использовать реальное имя объекта в документе. Если вы хотите указать конкретное имя, вы можете написать page.Add('graph', name='graph') или сохранить и использовать переменную .

+0

спасибо, это здорово. – MikeS

Смежные вопросы