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