Ich habe nach einem Arbeitsbeispiel gesucht, wie man ein Matplotlib-Diagramm in pyside einbetten kann, das mit dem QT-Designer erstellt wird, während die Logik in einer separaten Datei bleibt. Ich weiß, dass es zahlreiche Beispiele im Web gibt, aber keiner von ihnen verwendet den QT-Designer und erstellt dann eine separate Datei, um die Logik hinzuzufügen, in der das Matplitlib-Plot einem Widget hinzugefügt wird. Ich fand ein Beispiel, das 'fast' funktioniert http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/, aber in meiner Version ist es nicht möglich, "Ändern Sie die layoutName Eigenschaft von" verticalLayout "zu" mplvl "".Matplotlib in Pyside mit Qt Designer (PySide)
So habe ich die folgenden spezifischen Fragen: Ich bin nicht klar, in welches Element kann dieses Grundstück in Pyside Qt Designer eingebettet werden. Ist es ein einfaches "Widget" (da es kein matplotlib-Widget in pyside gibt). Wenn ja, wie kann ich dann das Diagramm zu diesem Widget hinzufügen? Oder muss ich eine 'FigureCanvas' mit Qt Designer erstellen? Ist das überhaupt möglich? Wenn das so ist, wie?
Hier ist das einfachste mögliche Design, das ich mit dem Pysid-Qt-Designer beim Einbetten eines Widgets machen kann (ist das korrekt?). Wie kann ich jetzt ein Matplotlib-Plot hinzufügen?
Wie in einer der Antworten vorgeschlagen, habe ich jetzt die Qwidget zu MyStaticMplCanvas gefördert und den Namen von Qwidget zu mplvl bearbeitet.
automatisch mit pyside Qt Designer erstellte Datei und kompiliert mit pyside-uic ui.ui -o ui.py -x
ui.py wie folgt aussieht:
# -*- 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_())
wie kann ich jetzt Hinzufügen eines Plots in das mplvl-Objekt aus einer separaten .py-Datei?
Sie nicht 'PyQt' und' PySide' Importe im gleichen Prozess mischen. Ich schlage vor, dass Sie alles aus dem Modul "matplotlib.backends.qt_compat" importieren, wo wir die Unterschiede unterschei- den. – tacaswell
Der Code von pyside wird automatisch von pyside-uic erzeugt, also muss ich irgendwie bleiben. Es sei denn du sagst es ist nicht möglich? – Nickpick
Ich hatte ein ähnliches Problem - obwohl es einige Unterschiede gibt. Bitte überprüfen Sie diesen Beitrag auf stackoverflow: http://stackoverflow.com/questions/36665850/matplotlib-animation-inside-your-own-pyqt4-gui/36669876#36669876 Ich hoffe, es hilft. –