在带有 PyQt5 的嵌入式 Matplotlib GUI 应用程序中使用交互模式 [重复]

     2023-03-30     149

关键词:

【中文标题】在带有 PyQt5 的嵌入式 Matplotlib GUI 应用程序中使用交互模式 [重复]【英文标题】:Use the interactive mode in an embedded Matplotlib GUI application with PyQt5 [duplicate] 【发布时间】:2016-12-05 10:35:09 【问题描述】:

我在 Python 3.5、PyQt5 和 Matplotlib 1.5.3 中编写了一个程序,其中我使用了 pyplot 交互模式。这是一个最小的例子:

import numpy as np
import matplotlib.pyplot as plt

plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
ax.grid(True)

for i in range (0, 10):
    plt.scatter(i, np.sin(i))
    fig.canvas.draw()

plt.ioff()
plt.show()

因为现在我在写GUI,我不能使用pyplot,因为它自己的eventloop会干扰Qt,所以我正在重写那部分代码,但我没有找到等效的交互模式使用 PyQt5 进入 Matplotlib 小部件。这是基本示例:

import sys
import time

from matplotlib.figure import Figure

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar

import numpy as np
from PyQt5.QtWidgets import QApplication, QVBoxLayout, QWidget

if __name__ == '__main__':

    fig = Figure()
    canvas = FigureCanvas(fig)
    ax = fig.add_subplot(111)
    ax.grid(True)

    for i in range (0, 10):
        ax.scatter(i, np.sin(i))
        fig.canvas.draw()

    ui = QWidget()

    toolbar = NavigationToolbar(canvas, ui, coordinates=True)

    vbox = QVBoxLayout()
    vbox.addWidget(canvas)
    vbox.addWidget(toolbar)
    ui.setLayout(vbox)
    ui.show()

    app = QApplication(sys.argv)
    sys.exit(app.exec_())

作为第一个示例,我想在每次迭代时更新绘图。 如何修改代码?

谢谢! 西西奥

【问题讨论】:

“重复”问题及其答案显示了如何使用 动画,但没有显示使用非- 嵌入式 matplotlib 图。对于那些感兴趣的人,this 可能会有所帮助。 【参考方案1】:

This question is showing how to do interactive animations in matplotlib and PyQt。因此,为了了解它是如何完成的,只需参考这个或任何其他相关问题。

您的代码的第一个问题是它在窗口甚至显示在屏幕上之前执行绘图循环。在 GUI 中,通常最好先初始化窗口,然后启动里面应该发生的任何事情。

目前隐藏在第一个问题后面的第二个问题是,您在 GUI 主循环内执行绘图循环,这样对于更长的循环时间,GUI 会冻结。

【讨论】:

您好,感谢您的回答和澄清,我会研究动画课,我会尝试,我认为它可以解决我的问题。

在 PyQt5 中嵌入 Matplotlib 图形

】在PyQt5中嵌入Matplotlib图形【英文标题】:EmbedMatplotlibGraphinaPyQt5【发布时间】:2021-06-3008:40:36【问题描述】:我正在尝试将matplotlib图形嵌入到PqQt5中,我有一个现成的函数可以调用它们,但是我没有成功。图的代码如下:importre... 查看详情

在 pyqt5 中包含带有悬停标签的 matplotlib

】在pyqt5中包含带有悬停标签的matplotlib【英文标题】:Includematplotlibinpyqt5withhoverlabels【发布时间】:2017-06-2316:40:09【问题描述】:我有一个来自matplotlib的图,我想在鼠标悬停时在标记点上显示标签。我在SO上找到了thisveryhelpfulwor... 查看详情

无法在 pyqt5 中嵌入的 matplotlib 上绘制线条

】无法在pyqt5中嵌入的matplotlib上绘制线条【英文标题】:cannotplotlinesonmatplotlibembeddedinpyqt5【发布时间】:2018-02-2207:11:46【问题描述】:以下是代码。它通过按下按钮绘制一条线。但是,当我按下按钮时,它只是打印出来matplotlib.l... 查看详情

为啥我不能在 pyqt5 gui 中嵌入的 matplotlib 颜色图中成功绘制感兴趣区域?

】为啥我不能在pyqt5gui中嵌入的matplotlib颜色图中成功绘制感兴趣区域?【英文标题】:Whycan\'tIsuccessfullydrawtheregionofinterestinamatplotlibcolormapembeddedinapyqt5gui?为什么我不能在pyqt5gui中嵌入的matplotlib颜色图中成功绘制感兴趣区域?【发... 查看详情

在 PyQt5 中嵌入 Matplotlib:工具栏不起作用

】在PyQt5中嵌入Matplotlib:工具栏不起作用【英文标题】:EmbeddingMatplotlibinPyQt5:Toolbardoesn\'twork【发布时间】:2017-07-0818:25:31【问题描述】:我正在开发一个使用matplotlib和pyqt5进行图像处理的应用程序。这是一些代码:classMainForm(QtW... 查看详情

带有 Matplotlib 的 PyQT5 插槽没有效果

】带有Matplotlib的PyQT5插槽没有效果【英文标题】:PyQT5slotwithMatplotlibhasnoeffect【发布时间】:2017-11-2215:21:56【问题描述】:我正在尝试实现一个插槽方法,该方法将清除作为QtWidget一部分的matplotlib图。我在Windows7和10上尝试了Python3... 查看详情

当我在 PyQt5 窗口中嵌入 Matplotlib 图形时,为啥有两个重复的轴标签?

】当我在PyQt5窗口中嵌入Matplotlib图形时,为啥有两个重复的轴标签?【英文标题】:WhytherearetwoduplicateaxeslabelswhenIembedMatplotlibfigureinsideaPyQt5window?当我在PyQt5窗口中嵌入Matplotlib图形时,为什么有两个重复的轴标签?【发布时间】:... 查看详情

为 PyQt5 嵌入式图传递 matplotlib 图/轴

】为PyQt5嵌入式图传递matplotlib图/轴【英文标题】:Passingmatplotlibplot/axesforPyQt5embeddedplots【发布时间】:2018-11-1314:08:59【问题描述】:我昨天有一个问题,关于如何使用现在可以正常工作的工具栏更新pyqt5gui中的嵌入式matplotlib图。... 查看详情

在 PyQT5 中使用 matplotlib 复选按钮

】在PyQT5中使用matplotlib复选按钮【英文标题】:UsingmatplotlibcheckbuttonsinPyQT5【发布时间】:2020-06-1611:06:02【问题描述】:是否可以在PyQT5中嵌入的绘图中使用matplotlib复选按钮?代码如下,情节有效,它嵌入在PyQT窗口中,但检查按... 查看详情

将 Matplotlib 图形嵌入到小部件中 - PyQt5

】将Matplotlib图形嵌入到小部件中-PyQt5【英文标题】:EmbedaMatplotlibgraphicintoawidget-PyQt5【发布时间】:2017-09-2414:53:52【问题描述】:我想将来自Matplotlib的图形嵌入到现有GUI中,其中包含从QtDesigner和PyQt5开发的Widget和PushButton。我可... 查看详情

在 pyqt5 的继承窗口上创建新组件

...窗口,它们可以打开新窗口。其中一个窗口有一个嵌入式matplotlib图和2个按钮。所以,从这个名为“PlotWindow”的现有窗口中,我想创建一个名为“Dynami 查看详情

当 matplotlib.FigureCanvas 嵌入 PyQt5 应用程序时,Matplotlib 回调不起作用?

】当matplotlib.FigureCanvas嵌入PyQt5应用程序时,Matplotlib回调不起作用?【英文标题】:Matplotlibcallbacksdon\'tworkwhenmatplotlib.FigureCanvasisembeddedinaPyQt5application?【发布时间】:2020-10-1322:56:45【问题描述】:请您,***的干瘪长老们,我正在... 查看详情

PyQt5嵌入matplotlib-plot,改变x-ticks等属性[重复]

】PyQt5嵌入matplotlib-plot,改变x-ticks等属性[重复]【英文标题】:PyQt5embeddedmatplotlib-plot,changingattributessuchasx-ticks[duplicate]【发布时间】:2018-08-0610:15:18【问题描述】:我正在尝试在PyQt5应用程序中制作一个简单的图表,但遇到了一些... 查看详情

pyqt5+matplotlib+basemap混合编程示例

参考技术A下面的例子简单地示范了将basemap画的地图通过matplotlib嵌入到PyQt5的QGraphicsView视图中的做法,并支持鼠标缩放。将basemap画图直接嵌入QT窗口进行显示是以前一直想解决的一个问题,目前链路关节已经打通,路径应该是没... 查看详情

在 pyqt5 小部件中更新 matplotlib

】在pyqt5小部件中更新matplotlib【英文标题】:Updatingmatplotlibinpyqt5widget【发布时间】:2021-02-1820:49:53【问题描述】:我在qt设计器中创建了一个UI并使用UIC加载它。我对UI进行了更新,所以我不想将UI转换为python。我正在使用以下帖... 查看详情

matplotlib pyqt5画布上两个可拖动点之间的线

】matplotlibpyqt5画布上两个可拖动点之间的线【英文标题】:Linebetweentwodraggablepointsonamatplotlibpyqt5canvas【发布时间】:2018-06-2320:45:09【问题描述】:我正在尝试在matplotlib画布上嵌入pyqt5应用程序的两个可拖动点之间画一条线。我使... 查看详情

Matplotlib 全屏不适用于 Qt EGLFS

】Matplotlib全屏不适用于QtEGLFS【英文标题】:MatplotlibFullscreendoesn\'tworkwithQtEGLFS【发布时间】:2018-07-2616:56:40【问题描述】:我正在使用带有raspbianjessie的raspberrypi3,我交叉编译了Qt5.6.4和PyQt5来制作嵌入式设备,在我的应用程序上... 查看详情

如何在 matplotlib 小部件的嵌入式图形上使用跨度选择器?

】如何在matplotlib小部件的嵌入式图形上使用跨度选择器?【英文标题】:HowtousetheSpanSelectoronaembeddedfigureofmatplotlibwidget?【发布时间】:2020-06-2921:52:45【问题描述】:我正在开发带有图形的系统的GUI。我想在我可视化的图表中使用... 查看详情