python - 如何在 PyQt5 Qwidget 上显示 matplotlib

标签 python matplotlib pyqt5 qt-designer

我想在我的 PyQt 设计器文件上绘图。 我制作了2个py文件,一个是Main,另一个是ui文件(pyuic) 这是UI代码

self.graph_widget = QtWidgets.QWidget(self.tab_4)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.graph_widget.sizePolicy().hasHeightForWidth())
self.graph_widget.setSizePolicy(sizePolicy)
self.graph_widget.setObjectName("graph_widget")

graph_widget 是小部件名称

    def show_graph(self):

        self.graph_widget.fig = plt.Figure()
        self.graph_widget.canvas = FigureCanvas(self.graph_widget.fig)

        canvasLayout = QVBoxLayout()
        canvasLayout.addStretch(1)

        self.graph_widget.layout = QHBoxLayout()
        self.graph_widget.layout.addLayout(canvasLayout)

        ax = self.graph_widget.fig.add_subplot(1, 1, 1) 
        ax.grid()
        self.graph_widget.canvas.draw() 

这是在我的小部件上显示图形的主要代码。 我想在我的小部件上显示图表,但它不起作用。 像发送信号之前一样只显示白色窗口。 并且不打印任何错误。

请告诉我如何打印它。

最佳答案

我认为你不太了解对象的概念。 在函数 show_graph() 中,您编写了 self.graph_widget.fig,这意味着,fig 是对象 graph_widget 的属性(变量),而 graph_widget 是一个对象 QWidget,因此通过编写 self.graph_widget.fig = plt.Figure( )没有任何意义。 我建议你这个解决方案:

def show_graph(self):
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas #You can put it at the beginning of your program
    self.fig = plt.Figure()
    self.plot = self.fig.add_subplot()
    self.canvas = FigureCanvas(self.fig)
    self.canvas.draw()
    #Create a layout
    layout = QVBoxLayout()
    layout.addWidget(self.canvas)
    #You can now add your layout to your QWidget()
    self.graph_widget.setLayout(layout)
    #You can active the grid by the following line
    self.plot.yaxis.grid()

抱歉我的英语不好,我是法国人。

关于python - 如何在 PyQt5 Qwidget 上显示 matplotlib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60361733/

相关文章:

python - 自动记录我的 REST API

python - 在 wxPython 中找出嵌套的子菜单选择?

c - 尝试为 Android 构建 PyQt5 应用程序并收到链接错误 : cannot find -lc++

python - PyQt5:如何单击按钮开始绘画?

python - 使用自定义 HeaderView 时列排序不起作用

python - 在对象定义中使用 "()"和不使用它有什么区别?

python - 在 Odoo 中隐藏菜单项?

python - 如何绘制尖角?

python - matplotlib 中每个图的宽度和高度轴相同

matplotlib - 如何在一个图中绘制极坐标和笛卡尔子图,如图所示