我一直在寻找一个工作示例,说明如何在保持逻辑在一个单独的文件中的情况下,在使用QT Designer创建的Pyside中嵌入matplotlib绘图。我知道网上有很多例子,但是它们实际上都没有使用QT Designer,然后创建一个单独的文件来添加逻辑,其中matplitlib绘图被添加到小部件中。我找到了一个“几乎”可用的示例http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/但在我的版本中不可能“将layoutName属性从“verticalLayout”更改为“mplvl”。”
所以我有以下具体问题: 我不清楚绘图可以嵌入到Pyside Qt Designer中的哪个项目中。它是一个简单的“widget”(因为在pyside中没有可用的matplotlib widget),如果是这样,我怎样才能将绘图添加到该widget中?或者我必须在Qt Designer中创建一个'FigureCanvas'吗?这真的可能吗?如果可以,那应该怎么做?
这是我可以使用Pyside Qt Designer创建的最简单的设计,用于嵌入widget(这正确吗?)。我现在怎样在其上方添加一个matplotlib绘图?
正如在其中一个答案中建议的那样,我现在已经将QWidget提升为MyStaticMplCanvas并将QWidget的名称更改为mplvl。
使用Pyside Qt Designer自动生成的文件,并使用pyside-uic ui.ui -o ui.py -x进行编译。 ui.py长这样:
如何从单独的 .py 文件中将绘图添加到 mplvl 对象中?
所以我有以下具体问题: 我不清楚绘图可以嵌入到Pyside Qt Designer中的哪个项目中。它是一个简单的“widget”(因为在pyside中没有可用的matplotlib widget),如果是这样,我怎样才能将绘图添加到该widget中?或者我必须在Qt Designer中创建一个'FigureCanvas'吗?这真的可能吗?如果可以,那应该怎么做?
这是我可以使用Pyside Qt Designer创建的最简单的设计,用于嵌入widget(这正确吗?)。我现在怎样在其上方添加一个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_())
如何从单独的 .py 文件中将绘图添加到 mplvl 对象中?
PyQt
和PySide
导入。我建议您从matplotlib.backends.qt_compat
模块中导入所有内容,我们在其中模拟了差异。 - tacaswell