Как включить вращение в Axes3D (matplotlib), встроенном в виджет PyQt4? - PullRequest
1 голос
/ 12 декабря 2011

Я использую подход, показанный в следующих вопросах, для встраивания Axes3D в виджет PyQt4:

Qt4 + mplot3d из matplotlib

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

Ответы [ 4 ]

1 голос
/ 26 апреля 2012

Каждый раз, когда вы вызываете что-то вроде Axes3D.clear(), затем, чтобы снова включить вращение мыши, вы должны вызвать Axes3D.mouse_init().

Кажется, без документов, но это работает для меня! Источник

0 голосов
/ 21 мая 2018

Здесь, в Python 3, после установки глобальной переменной self.ax я включил вращение мыши, вызвав self.ax.mouse_init ().Возможно, это поможет вам.

self.fig = Figure(figsize = (5,5), dpi = 100)
self.ax = self.fig.add_subplot(1,1,1, projection='3d')
self.canvas = FigureCanvasTkAgg(self.fig, root)
self.ax.mouse_init()
self.canvas.draw()
self.canvas.get_tk_widget().grid()
0 голосов
/ 07 августа 2013

У меня была похожая проблема, но мои оси не появлялись.Я позвонил FigureCanvas.__init__(), затем добавил оси к фигуре, позвонив self.ax = self.fig.add_subplot(111, projection='3d'), как рекомендовано Björn

0 голосов
/ 25 января 2012

У меня была такая же проблема, и я решил ее после глубокой отладки.Проблема заключается в несогласованности экземпляров canvas.Код примера сначала создает фигуру, которая автоматически предоставляет фигуре экземпляр холста.Затем к фигуре будут добавлены оси, а затем холст фигуры заменен другим холстом, который можно использовать как QWidget.

Но конструктор Axes3D добавляет функции обратного вызова на холст своей фигуры для реализацииособенность вращенияТаким образом, если холст заменяется после этого, связь с функциями вращения теряется.

Может быть, достаточно просто вызвать FigureCanvas.__init__() перед добавлением осей к фигуре, но я этого не пробовал.

Мое рабочее решение немного отличается: сначала я звоню matplotlib.use("Qt4Agg"), чтобы установить правильный бэкэнд.Затем я создаю фигуры с помощью fig = matplotlib.pyplot.figure(), что гарантирует, что они уже содержат правильный холст, а затем добавляю Axes3D к ним.Я получаю доступ к холсту просто как элемент данных fig.canvas и использую его как QWidget.Также важно вызвать QtGui.QApplication() перед построением любой фигуры.

...