Ho cercato un esempio funzionante su come incorporare un grafico matplotlib in campagna che viene creato con il progettista QT mantenendo la logica in un file separato. So che ci sono numerosi esempi sul web ma nessuno di questi usa effettivamente la finestra di progettazione QT e quindi crea un file separato per aggiungere la logica in cui la trama matplitlib viene aggiunta a un widget. Ho trovato un esempio che 'quasi' funziona http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/ ma ma nella mia versione non è possibile "Cambiare la proprietà layoutName da" verticalLayout "a" mplvl "".Matplotlib in Phare con Qt Designer (PySide)
Quindi ho le seguenti domande specifiche: Non sono chiaro in quale elemento tale trama può essere incorporata in Phare Qt Designer. È un semplice "widget" (dato che non esiste un widget matplotlib disponibile in campagna). In tal caso, come posso quindi aggiungere la trama a quel widget? O devo creare un 'FigureCanvas' con Qt Designer? Ciò è effettivamente possibile? Se é cosi, come?
Ecco il disegno più semplice che posso fare con il progettista Qt di Phare per incorporare un widget (è corretto?). Come posso aggiungere una trama matplotlib su di essa?
Come suggerito in una delle risposte, ho promosso Qwidget a MyStaticMplCanvas e modificato il nome di Qwidget in mplvl.
generato automaticamente file con PySide Qt Designer e compilato con PySide-UIC ui.ui -o ui.py -x
ui.py assomiglia a questo:
# -*- 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_())
come posso ora aggiungi una trama nell'oggetto mplvl da un file .py separato?
Non si può mescolare '' PyQt' e PySide' importazioni nello stesso processo. Vi suggerisco di importare tutto dal modulo 'matplotlib.backends.qt_compat' dove spessiamo su quali sono le differenze. – tacaswell
Il codice di campagna viene generato automaticamente da pyside-uic quindi ho bisogno di rimanere in qualche modo. A meno che tu non stia dicendo che non è possibile? – Nickpick
Ho avuto un problema simile, anche se ci sono alcune differenze. Si prega di controllare questo post su StackOverflow: http://stackoverflow.com/questions/36665850/matplotlib-animation-inside-your-own-pyqt4-gui/36669876#36669876 Spero che aiuti. –