【问题标题】:Use the interactive mode in an embedded Matplotlib GUI application with PyQt5 [duplicate]在带有 PyQt5 的嵌入式 Matplotlib GUI 应用程序中使用交互模式 [重复]
【发布时间】: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 可能会有所帮助。

标签: python qt matplotlib pyqt5


【解决方案1】:

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

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

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

【讨论】:

  • 您好,感谢您的回答和澄清,我会研究动画课,我会尝试,我认为它可以解决我的问题。
猜你喜欢
  • 2019-04-14
  • 2019-04-08
  • 1970-01-01
  • 2012-07-30
  • 1970-01-01
  • 1970-01-01
  • 2013-04-17
  • 1970-01-01
  • 2010-12-28
相关资源
最近更新 更多