【发布时间】:2016-07-27 15:17:09
【问题描述】:
我一直在寻找一个工作示例,如何在使用 QT 设计器创建的 pyside 中嵌入 matplotlib 图,同时将逻辑保存在单独的文件中。我知道网上有很多示例,但没有一个真正使用 QT 设计器,然后创建一个单独的文件来添加将 matplitlib 图添加到小部件的逻辑。我发现了一个“几乎”可以工作的示例http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/,但在我的版本中,无法“将 layoutName 属性从“verticalLayout”更改为“mplvl”。
所以我有以下具体问题: 我不清楚该绘图可以嵌入到 Pyside Qt 设计器中的哪些项目。它是一个简单的“小部件”吗(因为 pyside 中没有可用的 matplotlib 小部件)。如果是这样,我该如何将绘图添加到该小部件?还是我必须用 Qt Designer 创建一个“FigureCanvas”?这可能吗?如果有,怎么做?
这是我可以使用 Pyside Qt 设计器在嵌入小部件时所做的最简单的设计(正确吗?)。我现在如何在它上面添加一个 matplotlib 图?
正如其中一个答案所建议的,我现在已将 Qwidget 提升为 MyStaticMplCanvas,并将 Qwidget 的名称编辑为 mplvl。
使用 Pyside Qt 设计器自动生成文件并编译 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模块中导入所有内容,我们会在其中填充差异。 -
pyside的代码是由pyside-uic自动生成的,所以我需要保留。除非你说不可能?
-
我也遇到了类似的问题——尽管有一些不同。请在 stackoverflow 上查看这篇文章:stackoverflow.com/questions/36665850/… 希望对您有所帮助。
标签: python matplotlib pyside