如何在 pyqt 中嵌入 matplotlib - 傻瓜指南

2024-02-04

我目前正在尝试将我想要绘制的图表嵌入到我设计的 pyqt4 用户界面中。由于我对编程几乎完全陌生 - 我不明白人们是如何在我发现的示例中嵌入的 - and that one http://eli.thegreenplace.net/files/prog_code/qt_mpl_bars.py.txt.

如果有人可以发布一步一步的解释或至少一个非常小、非常简单的代码来创建例如一个 pyqt4 GUI 中的一张图表和一个按钮。


实际上并没有那么复杂。相关的 Qt 小部件位于matplotlib.backends.backend_qt4agg http://matplotlib.org/api/backend_qt4agg_api.html. FigureCanvasQTAgg and NavigationToolbar2QT通常是您所需要的。这些是常规的 Qt 小部件。您将它们视为任何其他小部件。下面是一个非常简单的例子Figure, Navigation和一个绘制一些随机数据的按钮。我添加了评论来解释事情。

import sys
from PyQt4 import QtGui

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure

import random

class Window(QtGui.QDialog):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)

        # a figure instance to plot on
        self.figure = Figure()

        # this is the Canvas Widget that displays the `figure`
        # it takes the `figure` instance as a parameter to __init__
        self.canvas = FigureCanvas(self.figure)

        # this is the Navigation widget
        # it takes the Canvas widget and a parent
        self.toolbar = NavigationToolbar(self.canvas, self)

        # Just some button connected to `plot` method
        self.button = QtGui.QPushButton('Plot')
        self.button.clicked.connect(self.plot)

        # set the layout
        layout = QtGui.QVBoxLayout()
        layout.addWidget(self.toolbar)
        layout.addWidget(self.canvas)
        layout.addWidget(self.button)
        self.setLayout(layout)

    def plot(self):
        ''' plot some random stuff '''
        # random data
        data = [random.random() for i in range(10)]

        # create an axis
        ax = self.figure.add_subplot(111)

        # discards the old graph
        ax.clear()

        # plot data
        ax.plot(data, '*-')

        # refresh canvas
        self.canvas.draw()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    main = Window()
    main.show()

    sys.exit(app.exec_())

Edit:

已更新以反映评论和 API 更改。

  • NavigationToolbar2QTAgg改变了NavigationToolbar2QT
  • 直接导入Figure代替pyplot
  • 替换已弃用的ax.hold(False) with ax.clear()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 pyqt 中嵌入 matplotlib - 傻瓜指南 的相关文章

随机推荐

  • Froala WYSIWYG 编辑器未显示 React 中的所有工具栏按钮

    工具栏按钮未显示在由 facebook create react app 创建的 React 应用程序中 我尝试在 src index tsx 中或在使用组件之前导入 JS 和 CSS 文件 我还尝试导入单独的插件 他们都没有工作 Froa
  • 在php中识别服务器端的浏览器

    我有一个网站 当用户单击特定页面 例如identify php 时 我想找到客户端正在使用的浏览器类型 浏览器可以是 mozilla IE opera chrome 或任何其他移动设备 例如 SonyEricssonK610i SAMSUN
  • 如何解决 AspNet Core 缺少依赖项的问题?

    因此 我对 project json 进行了更改 这导致了重新恢复 从而产生了一堆无法解析的依赖项 你怎么知道这里发生了什么 这绝对有效 因为我针对这个 project json 文件编写了大量代码 dependencies EntityF
  • urllib3 支持 HTTP/2 请求吗?会吗?

    我对各种 python HTTP 库了解如下 Requests https docs python requests org en latest does 不支持HTTP 2请求 https stackoverflow com q 4493
  • javaquartz调度程序立即启动一个新作业

    是否可以创建一个立即触发的作业 当我希望现在触发该作业时 我使用当前日期和时间构建了一个 cron 表达式字符串 我认为它太复杂了 是否有另一种方法可以立即触发该作业 提前致谢 是的 使用下面的Trigger立即解雇你的工作 而不是等待 C
  • “int* ptr = int()”值初始化如何不非法?

    以下代码 取自从这里 https stackoverflow com questions 8067568 how do i value initialize a type pointer using type like syntax 806
  • Spring Batch - “job”作用域 bean 不能注入到“job”或“step”作用域 bean

    我正在使用 Spring Batch 版本 3 0 2 RELEASE 和 Spring Framework 版本 3 2 12 RELEASE 我正在尝试将一个工作范围的 bean 注入到另一个工作范围的 bean 中 我的配置看起来像这
  • 如何使用 x-www-form-urlencoded 正文发送 post 请求

    在java中 我可以如何发送请求x www form urlencoded header 我不明白如何发送带有键值的正文 如上面的屏幕截图所示 我试过这段代码 String urlParameters cafedra name data t
  • 比较属性集以找到最佳匹配

    似乎有类似的问题 但又不完全是 我尝试走这条路 比较数据集并返回最佳匹配 https stackoverflow com questions 1370565 compare data sets and return best match 但
  • Mongoose:findOneAndUpdate 不返回更新的文档

    下面是我的代码 var mongoose require mongoose mongoose connect mongodb localhost test var Cat mongoose model Cat name String age
  • JavaScript 全局变量的生命周期

    我在 w3schools 上阅读了以下内容 但我不明白第二部分的含义 全局变量 对于加载到同一窗口中的新页面仍然可用 任何人都可以启发我吗 在 Web 浏览器中 当您关闭浏览器窗口 或选项卡 时 全局变量将被删除 但对于加载到同一窗口中的新
  • 如何插入多行 - 需要循环吗?

    我有以下声明 insert into forecast entry user role xref user master id role id created date created by values 276 user master i
  • 获取 Mailgun 中打开或单击的电子邮件的主题

    我已设置 Mailgun 域来跟踪我发送的电子邮件的打开和点击情况Laravel https laravel com docs 5 7 mail introduction app 现在我想设置webhooks https documenta
  • 使 Pydantic BaseModel 字段可选,包括 PATCH 的子模型

    正如已经问过的similar有疑问 我要支持PATCHFastApi 应用程序的操作 调用者可以根据需要指定 Pydantic 的任意数量的字段BaseModel 有子模型 这样高效PATCH可以执行操作 而调用者不必仅仅为了更新两个或三个
  • 注销后销毁握手。套接字.io

    您好 我正在尝试将聊天构建到应用程序中 我想知道的是 当用户注销网站时 我如何销毁与该会话关联的 socket io 握手 以便用户在注销时无法从另一个选项卡发送消息 我正在使用expressjs 如果有帮助的话 好吧 万一有人发现这个并想
  • 查找父节点所选文本的范围

    我想找到所选文本相对于父元素的范围 所以在这个 p 元素 即anchorOffset focusOffset 狐狸 是 16 19 p p The quick brown fox jumps over the lazy dog p 但如果我
  • 在保护模式下重新启动

    在 x86 实模式下重启非常简单 您可以使用 BIOS 或 jmp 0xFFFF 0000 但是在保护模式下应该如何重新启动呢 有关端口 0xCF9 的信息 为了写入它 需要访问内核模式 即来自内核驱动程序 0xCF9端口可以获得三种复位类
  • 使用 about:config 覆盖 Firefox 不安全警告

    我正在尝试编写一个简单的批处理脚本来截取内部网页的一些屏幕截图 并发现 Firefox 具有将窗口渲染到画布的能力 var canvas document createElement canvas var ctx canvas getCon
  • 整数相乘并赋值给 Long 时溢出

    如果我在立即窗口中输入以下内容 则会收到运行时错误 6 溢出 MsgBox 24 60 60 为什么是这样 这也失败了 Dim giveTime As Long giveTime 24 60 60 为什么是这样 giveTime被声明为 L
  • 如何在 pyqt 中嵌入 matplotlib - 傻瓜指南

    我目前正在尝试将我想要绘制的图表嵌入到我设计的 pyqt4 用户界面中 由于我对编程几乎完全陌生 我不明白人们是如何在我发现的示例中嵌入的 and that one http eli thegreenplace net files prog