Я искал рабочий пример, как встраивать график matplotlib в pyside, который создается с помощью конструктора QT, сохраняя логику в отдельном файле. Я знаю, что в Интернете есть множество примеров, но ни один из них фактически не использует конструктор QT, а затем создает отдельный файл, чтобы добавить логику, где график matplitlib добавлен в виджет. Я нашел пример, который «почти» работает http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/, но в моей версии невозможно «изменить свойство layoutName с« verticalLayout »на« mplvl »».Matplotlib в Pyside с дизайнером Qt (PySide)
У меня есть следующие конкретные вопросы: Я не понимаю, в какой предмет этот сюжет можно встроить в конструктор Pyside Qt. Это простой «виджет» (поскольку в pyside нет виджета matplotlib). Если да, то как я могу добавить сюжет к этому виджету? Или мне нужно создать «FigureCanvas» с Qt Designer? Это вообще возможно? Если да, то как?
Вот простейший возможный дизайн, который я могу сделать с дизайнером Pyside Qt при встраивании виджета (это правильно?). Как я могу добавить график matplotlib поверх него?
Как было предложено в одном из ответов, я теперь продвинул Qwidget в MyStaticMplCanvas и отредактировал имя Qwidget для mplvl.
Автоматически сгенерированный файл с PySide Qt Designer и скомпилирован с PySide-UIC ui.ui -o ui.py -x
ui.py выглядит следующим образом:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'gui.ui'
#
# Created: Wed Apr 20 14:00:02 2016
# by: pyside-uic 0.2.15 running on PySide 1.2.2
#
# WARNING! All changes made in this file will be lost!
from PySide import QtCore, QtGui
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(444, 530)
self.centralwidget = QtGui.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.mplvl = MyStaticMplCanvas(self.centralwidget)
self.mplvl.setGeometry(QtCore.QRect(120, 190, 221, 161))
self.mplvl.setObjectName("mplvl")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtGui.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 444, 21))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtGui.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
from mystaticmplcanvas import MyStaticMplCanvas
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
MainWindow = QtGui.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
как я могу прямо сейчас добавить участок в объект mplvl из отдельного файла .py?
Вы не можете смешивать '' PyQt' и PySide' импорта в том же процессе. Я предлагаю вам импортировать все из модуля matplotlib.backends.qt_compat', где мы подгоняем различия. – tacaswell
Код pyside автоматически генерируется pyside-uic, поэтому мне нужно как-то остаться. Разве вы не говорите, что это невозможно? – Nickpick
У меня была аналогичная проблема - хотя есть некоторые отличия. Пожалуйста, ознакомьтесь с этим сообщением в stackoverflow: http://stackoverflow.com/questions/36665850/matplotlib-animation-inside-your-own-pyqt4-gui/36669876#36669876 Надеюсь, это поможет. –