方式1
使用Qt Designer新建一个Main Window,在此之上创建一个Vertical Layout。
import sys
import numpy as np
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication
import matplotlib
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
class FigureCanvasDemo1(FigureCanvas):
def __init__(self):
fig = Figure()
FigureCanvas.__init__(self, fig)
self.axes = fig.add_subplot()
# 开始作图
x = np.linspace(0, 10, 100)
y = 2 * np.sin(2 * x)
self.axes.plot(x, y)
self.axes.set_title('样例-sin图像')
self.axes.grid()
self.draw()
class MainWindow():
def __init__(self):
super().__init__()
loader = QUiLoader()
# 加载之前新建的ui文件
self.ui = loader.load("./ui/PicDemo1.ui")
self.plot = FigureCanvasDemo1()
layout = self.ui.verticalLayout
layout.addWidget(self.plot)
self.ui.setLayout(layout)
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.ui.show()
sys.exit(app.exec_())
显示效果
方式2
使用Qt Designer新建一个Main Window,在此之上创建一个Graphics View。
import sys
import numpy as np
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QGraphicsScene
import matplotlib
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
class FigureCanvasDemo2(FigureCanvas):
def __init__(self, parent=None, width=10, height=5):
# 创建一个Figure 如果不加figsize 显示图像过大 需要缩小
fig = plt.Figure(figsize=(width, height), tight_layout=True) # tight_layout: 用于去除画图时两边的空白
FigureCanvas.__init__(self, fig) # 初始化父类
self.setParent(parent)
self.axes = fig.add_subplot(111) # 添加子图
self.axes.spines['top'].set_visible(False) # 去掉绘图时上面的横线
self.axes.spines['right'].set_visible(False) # 去掉绘图时右面的横线
class MainWindow():
def __init__(self):
super().__init__()
loader = QUiLoader()
# 加载之前新建的ui文件
self.ui = loader.load("./ui/PicDemo2.ui")
# 缩小图像尺寸
self.visual_data = FigureCanvasDemo2(width=self.ui.graphicsView.width() / 101,
height=self.ui.graphicsView.height() / 101)
x = np.linspace(0, 10, 100)
y = 2 * np.sin(2 * x)
self.visual_data.axes.plot(x, y)
self.visual_data.axes.grid()
# 加载的图形(FigureCanvas)不能直接放到graphicview控件中,必须先放到graphicScene,然后再把graphicscene放到graphicview中
self.graphicsScene = QGraphicsScene() # 创建一个QGraphicsScene
# 把图形放到QGraphicsScene中,注意:图形是作为一个QWidget放到放到QGraphicsScene中的
self.graphicsScene.addWidget(self.visual_data)
# 把QGraphicsScene放入QGraphicsView中
# self.ui 后跟的是对象的名字 这里QGraphicsView对象的名字是graphicsView
self.ui.graphicsView.setScene(self.graphicsScene)
self.ui.graphicsView.show() # 调用show方法呈现图形
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.ui.show()
sys.exit(app.exec_())
显示效果
方式3
ui文件同方式2,还是GraphicsView
import sys
import numpy as np
from PySide2.QtUiTools import QUiLoader
from PySide2.QtWidgets import QApplication, QGraphicsScene
import matplotlib
matplotlib.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False #用来正常显示负号
class FigureCanvasDemo3(FigureCanvas):
def __init__(self, parent=None, width=10, height=5):
fig = Figure(figsize=(width, height), tight_layout=True)
FigureCanvas.__init__(self, fig)
self.axes = fig.add_subplot()
# 开始作图
x = np.linspace(0, 10, 100)
y = 2 * np.sin(2 * x)
self.axes.plot(x, y)
self.axes.set_title('样例-sin图像')
self.axes.grid()
self.draw()
class MainWindow():
def __init__(self):
super().__init__()
loader = QUiLoader()
# 加载之前新建的ui文件
self.ui = loader.load("./ui/PicDemo2.ui")
self.plot = FigureCanvasDemo3(
width=self.ui.graphicsView.width() / 101,
height=self.ui.graphicsView.height() / 101
)
self.graphicsScene = QGraphicsScene() # 创建一个QGraphicsScene
self.graphicsScene.addWidget(self.plot)
self.ui.graphicsView.setScene(self.graphicsScene)
self.ui.graphicsView.show() # 调用show方法呈现图形
if __name__ == '__main__':
app = QApplication(sys.argv)
mainwindow = MainWindow()
mainwindow.ui.show()
sys.exit(app.exec_())
显示效果
如果文章对你有用的话,希望给我点个关注点个赞,谢谢。^_^