2014-11-07 3 views
1

Я создал небольшой графический интерфейс с QT, который установил один матплотблиб figure и axes. В GUI есть элементы управления, чтобы изменить практически все, что связано с внешним видом axes.matplotlib gui отвечает на изменения осей

В основном, это делает это каждый виджет излучающие сигналы обратно к основной раме, и это вызывает соответствующий Matplotlib setters на axes и figure объектов.

Однако, возможно, для axes (и, следовательно, изображение, отображаемое на FigureCanvas) изменить без ввода из графического интерфейса (например, при автомасштабировании или добавления определенных графиков, которые автоматически регулируют оси). В этом случае виджет, управляющий, например, теперь границы оси x будут отображать неправильные значения.

Я хочу, чтобы все соответствующие виджеты обновлялись при обновлении осей .... как я мог это достичь?

Я думаю, что это проблема, которая была решена раньше - как включить двустороннюю связь между отдельными объектами?

+0

Это на самом деле сложная задача - знаете ли вы, что вам нужно делать что-то таким образом, чтобы автоматически отрегулировать? возможно, вместо автоматического добавления подзаголовка, вы можете сами изменить или установить размеры осей и соответствующим образом обновить виджеты. – Ajean

+0

Проблема заключается в том, что вы вызываете процедуру matplotlib для создания нового графика (например, 'axes.pie'), matplotlib будет корректировать сами оси, поэтому любые виджеты, управляющие осями, теперь не синхронизированы ... To всегда вручную контролировать, потребует перезаписи хорошей части matplotlib, чего я бы предпочел избежать. – jramm

+0

Действительно, я думаю, это была просто мысль, если операции были достаточно простыми. Моя единственная другая идея - это, пожалуй, метод «обновления», который входит в вашу иерархию сюжетов и обращается к различным геттерам, чтобы получить правильные значения для обновления виджетов? Таким образом, вы можете позвонить ему после любого вызова сюжета. – Ajean

ответ

-1
fig.canvas.draw() 
time.sleep(1e-2) 

всякий раз, когда что-либо пишет на участок? однако это трудно помочь без кода. Показать пример того, как ваш код не работает, поможет много.

EDIT:

Постараюсь это снова, то: Что о получении состояния участка обновляемого? Я предполагаю, что это означает @Ajean методом updater. Я знаю, что у художников matplotlib есть метод Artist.properties(), который возвращает все свойства и значения.

Я полагаю, что Оси будут иметь аналогичный метод.

Быстрый взгляд на Matplotlib документы дали 2 интересные методы осей: ax.get_autoscale_on() и ax.set_autoscale_on().

ax.set_autoscale_on(False) предотвратит обновление графиков состояния осей.

+0

Вы неправильно поняли вопрос. У меня нет проблем с обновлением холста.Мне нужны виджеты, которые пользователь использует для управления осями для обновления с соответствующими параметрами. Эти виджеты могут быть, например, управляйте осями цвет сетки – jramm

+0

Снова очень мало информации, чтобы продолжить здесь ... Я предполагаю, что вы знакомы с обновлениями ... http://qt-project.org/doc/qt-4.8/qwidget.html – nico

+0

Кроме того, только добавил ответ, потому что я не могу комментировать вопросы, пока нет комментариев, ваш -1 не помог: P – nico

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