Qt4 + matplotlib 的 mplot3d

2023-12-02

我正在尝试在 Qt4 GUI 中嵌入 3D 绘图(有其他按钮),这可以使用 matplotlib 的 mplot3d 吗?

我知道可以使用“matplotlib.backends.backend_qt4agg”绘制二维图,并且我已经这样做了。

如果是,请举个例子。

如果不是,最喜欢的选项是什么? VTK?

Thanks!


虽然这不是您将看到的最干净的东西。我注意到它不像 tkinter 后端那么快。然后它又起作用了。

玩得开心:

import os
import sys

from PyQt4 import QtCore,  QtGui

from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4 import NavigationToolbar2QT as NavigationToolbar

from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D

class QtMplCanvas(FigureCanvas):
    def __init__(self, parent=None, width = 6.5, height = 5.5, dpi = 100, sharex = None, sharey = None, fig = None):
        if fig == None:
            self.fig = Figure(figsize = (width, height), dpi=dpi, facecolor = '#FFFFFF')
            self.ax = self.fig.add_subplot(111, projection='3d')
            self.fig.subplots_adjust(left=0.1, bottom=0.1, right=0.9, top=0.9)
            self.ax.hold(True)
        else:
            self.fig = fig

        FigureCanvas.__init__(self, self.fig)
        FigureCanvas.setSizePolicy(self,
            QtGui.QSizePolicy.Expanding,
            QtGui.QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)

    def sizeHint(self):
        w, h = self.get_width_height()
        return QtCore.QSize(w, h)

    def minimumSizeHint(self):
        return QtCore.QSize(10, 10)

    def sizeHint(self):
        w, h = self.get_width_height()
        return QtCore.QSize(w, h)

    def minimumSizeHint(self):
        return QtCore.QSize(10, 10)


class MyNavigationToolbar(NavigationToolbar) :
    def __init__(self, parent, canvas, direction = 'h' ) :

        self.canvas = canvas
        QWidget.__init__( self, parent )

        if direction=='h' :
            self.layout = QHBoxLayout( self )
        else :
            self.layout = QVBoxLayout( self )

        self.layout.setMargin( 2 )
        self.layout.setSpacing( 0 )

        NavigationToolbar2.__init__( self, canvas )


    def set_message( self, s ):
        pass


class MPL_WIDGET_3D(QtGui.QWidget):
    def __init__(self, parent = None, enableAutoScale = False, enableCSV = False, enableEdit = False, fig = None):
        QtGui.QWidget.__init__(self, parent)
        self.canvas = QtMplCanvas(fig)
        self.canvas.ax.mouse_init()
        self.toolbar = NavigationToolbar(self.canvas, self.canvas)
        self.vbox = QtGui.QVBoxLayout()
        self.vbox.addWidget(self.canvas)
        self.vbox.addWidget(self.toolbar)
        self.setLayout(self.vbox)


        ###########SAVING FIGURE TO CLIPBOARD##########
        self.cb = None #will be used for the clipboard
        self.tempPath = getHomeDir()
        self.tempPath = os.path.join(self.tempPath,'tempMPL.png')

        self.mpl2ClipAction = QtGui.QAction("Save to Clipboard",  self)
        self.mpl2ClipAction.setShortcut("Ctrl+C")
        self.addAction(self.mpl2ClipAction)
        QtCore.QObject.connect(self.mpl2ClipAction,QtCore.SIGNAL("triggered()"), self.mpl2Clip)

    def mpl2Clip(self):
        try:
            self.canvas.fig.savefig(self.tempPath)
            tempImg = QtGui.QImage(self.tempPath)
            self.cb = QtGui.QApplication.clipboard()
            self.cb.setImage(tempImg)
        except:
            print 'Error copying figure to clipboard'
            errorMsg = "Sorry: %s\n\n:%s\n"%(sys.exc_type, sys.exc_value)
            print errorMsg

####USED TO GET THE USERS HOME DIRECTORY FOR USE OF A TEMP FILE

def valid(path):
    if path and os.path.isdir(path):
        return True
    return False

def env(name):
    return os.environ.get( name, '' )

def getHomeDir():
    if sys.platform != 'win32':
        return os.path.expanduser( '~' )

    homeDir = env( 'USERPROFILE' )
    if not valid(homeDir):
        homeDir = env( 'HOME' )
        if not valid(homeDir) :
            homeDir = '%s%s' % (env('HOMEDRIVE'),env('HOMEPATH'))
            if not valid(homeDir) :
                homeDir = env( 'SYSTEMDRIVE' )
                if homeDir and (not homeDir.endswith('\\')) :
                    homeDir += '\\'
                if not valid(homeDir) :
                    homeDir = 'C:\\'
    return homeDir


if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    mplQt = MPL_WIDGET_3D()
    mplQt.show()
    sys.exit(app.exec_())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Qt4 + matplotlib 的 mplot3d 的相关文章

  • 如何使用 Julia 查找矩阵中的连通分量

    假设我有以下矩阵 此处用 Julia 语言定义 mat 1 1 0 0 0 1 1 0 0 0 0 0 0 0 1 0 0 0 1 1 将一组值为 1 的相邻元素视为一个 分量 如何识别该矩阵有 2 个分量以及每个分量由哪些顶点组成 对于矩
  • 检查时间戳列是否在另一个数据帧的日期范围内

    我有一个数据框 df A 有两列 amin 和 amax 这是一组时间范围 我的目标是查找 df B 中的列是否位于 df A amin 和 amax 列中范围的任何行之间 df A amin amax amin amax 0 2016 0
  • nginx/uwsgi 服务器的持久内存中 Python 对象

    我怀疑这是否可能 但这是问题和提出的解决方案 提出的解决方案的可行性是这个问题的对象 我有一些需要可用于所有请求的 全局数据 我将这些数据保存到 Riak 并使用 Redis 作为缓存层以提高访问速度 目前 数据被分为约 30 个逻辑块 每
  • 如何将多项式拟合到带有误差线的数据

    我目前正在使用 numpy polyfit x y deg 将多项式拟合到实验数据 然而 我想拟合一个基于点误差使用加权的多项式 我已经发现scipy curve fit http docs scipy org doc scipy refe
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • 使用 scikit-learn 在朴素贝叶斯分类器中混合类别数据和连续数据

    我正在使用 Python 中的 scikit learn 开发分类算法来预测某些客户的性别 除此之外 我想使用朴素贝叶斯分类器 但我的问题是我混合了分类数据 例如 在线注册 接受电子邮件通知 等 和连续数据 例如 年龄 长度 会员资格 等
  • 当类的任何属性被修改时,类如何运行某些函数?

    是否有一些通用方法可以让类在以下情况下运行函数 any它的属性被修改了吗 我想知道是否可以运行某些子进程来监视类的更改 但也许有一种方法可以继承class并修改一些on change函数是 Python 类的一部分 有点像默认的 repr
  • 忽略覆盖率报告中的空文件

    覆盖率 py https github com nedbat coveragepy会包括 init py在其报告中并将其显示为 0 行 但覆盖率为 100 我想从覆盖率报告中排除所有空白文件 我不能只添加 init py to omit作为
  • 更改散景图中选项卡的样式

    我想知道是否有办法更改散景图上生成的选项卡的属性 诸如增加文本字体 更改制表符宽度等更改 以下是用于生成具有两个选项卡的绘图的简单代码 from bokeh models widgets import Panel Tabs from bok
  • 在 pandas eval 中调用 round()、ceiling()、floor()、min()、max()

    正如标题所说 有没有办法在 pandas eval 中支持 round ceiling min max floor 函数 数据框 import pandas as pd import numexpr as ne op d ID 1 2 3
  • 使用 Pytest 捕获 SystemExit 消息

    我正在使用 pytest 编写测试 我遇到了一些函数抛出异常的情况SystemExit如果输入错误 终端上会显示一些错误消息 我想为以下情况编写测试SystemExit抛出并验证输出错误消息中是否有特定字符串 这是代码 def test v
  • python中终止进程的跨平台方法

    当我尝试使用 subprocess Popen terminate 或 Kill 命令终止 Windows 中的进程时 出现访问被拒绝错误 如果文件不再存在 我真的需要一种跨平台的方式来终止进程 是的 我知道这不是做我正在做的事情的最优雅的
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • Python、Oracle DB、列中的 XML 数据,获取 cx_Oracle.Object

    我正在使用 python 从 Oracle DB 获取数据 所有行都有一个包含 XML 数据的列 当我使用 python 打印从 Oracle DB 获取的数据时 包含 XML 数据的列将打印为 0x7fffe373b960 处的 cx O
  • 深度学习——一些关于caffe的幼稚问题

    我试图了解 caffe 的基础知识 特别是与 python 一起使用 我的理解是模型定义 比如给定的神经网络架构 必须包含在 prototxt file 当您使用数据训练模型时 prototxt 您将权重 模型参数保存到 caffemode
  • Django populate() 不可重入

    当我尝试在生产环境中加载 Django 应用程序时 我不断收到此消息 我尝试了所有的 stackoverflow 答案 但没有任何解决办法 任何其他想法 我使用的是 Django 1 5 2 和 Apache Traceback most
  • 获取 TypeError:ord() 期望长度为 1 的字符串,但 int 发现错误 [重复]

    这个问题在这里已经有答案了 Code is from PyPDF2 import PdfFileReader with open HTTP Book pdf rb as file pdf PdfFileReader file pagedd
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这
  • Python tkinter:在组合框中使用“文本变量”似乎没用

    使用textvariable在 tkinter 中创建组合框时的属性似乎完全没用 有人可以解释一下目的是什么吗 我查看了 Tcl 文档 它说textvariable用于设置默认值 但看起来在 tkinter 中您只需使用 set方法来做到这
  • 关闭 IPython Notebook 中的自动保存

    我正在寻找一种方法来关闭 iPython 笔记本中的自动保存 我已经通过 Google Stack Overflow 搜索看到了有关如何打开自动保存的参考资料 但我想要相反的内容 关闭自动保存 如果这是可以永久设置的东西而不是在每个笔记本的

随机推荐

  • WPF - 跨线程事件

    我的问题是我想使用新线程在画布中添加项目 所以我有多个方法 底部的示例 它们生成例如图像并设置一些属性 然后他们应该通过事件回调生成的思考 以下是我调用的为画布生成想法的线程的一部分 Here I create the event in t
  • 将表名作为参数传递给 SqlCommand 的问题

    这个问题的目标是避免SQL注入 我有查询 选择 插入 更新 删除 当我需要发送表名作为参数时 我该怎么做 我将非常感谢你的帮助 insertCommand CommandText update tableName set code code
  • jQuery 可选定制

    我有一个 jQuery 可供选择 如下所示 它实际上是一个有序列表 有序列表位于名为 myBorderDiv 的 div 内 当我按下 control 并将鼠标悬停在项目上时 所有项目都会出现不需要的效果 在 IE8 中 如下图所示 如何克
  • PHP $_SESSION 标头重定向后为空

    当我进行标头重定向时 我丢失了 SESSION 中的数据 当我使用调试器完成此操作时 我可以在 exit 之前看到 SESSION 中的所有数据 登录 php 确保您正在使用该功能session start 在 if 语句之前myaccou
  • Google 表格:根据第 1 行中的日期隐藏列

    我没有在 Excel 或 Google Sheets 中编写脚本的经验 因此我尝试扩展一下 看看是否有解决我的问题的方法 我们在厨房改造业务中使用 Google 表格制作每周日历 我们从左到右组织几周 并在这些栏中列出我们当前正在从事的工作
  • 如何解决机器人框架中测试自动化的 ssl 证书错误

    通过机器人框架运行自动化测试时 我的 Web 应用程序出现 ssl 证书错误 我尝试了下面带有不同镶边选项的代码 但没有一个在有或没有布尔值的情况下也能工作 list Create List unsafely treat insecure
  • 打印数组元素

    以下 C 程序的预期输出是打印数组元素 但实际运行时却并非如此 include
  • Python 中的梯形规则

    我正在尝试在 Python 2 7 2 中实现梯形规则 我写了以下函数 def trapezoidal f a b n h float b a n s 0 0 s h f a for i in range 1 n s 2 0 h f a i
  • cherrypy/jquery CORS 麻烦

    我有一个基于 Cherrypy 的简单 Python Web 服务器 其资源应提供API 服务器有以下代码来提供CORS def CORS cherrypy response headers Access Control Allow Ori
  • 如何创建多个警报?

    我可以使用下面的代码创建和取消警报 我想创建多个警报 闹钟时间来自数组列表 在此数组列表中 我想为每个日期创建一个警报 按下取消按钮将仅取消当前警报 我该怎么做 public void onCreate Bundle savedInstan
  • Caffe:如果两层反向传播渐变到同一个底部斑点会发生什么?

    我想知道如果我有一个层生成一个底部斑点 该斑点进一步被两个后续层消耗 这两个层都会生成一些梯度来填充反向传播阶段的 Bottom diff 将两个梯度相加形成最终梯度吗 或者说 只有他们一个人能够活下去 根据我的理解 Caffe 层需要在用
  • FOS用户包认证

    How FOS 用户包通过此服务容器对用户进行身份验证 this gt container gt get security context gt getToken gt getUser 我想操纵身份验证过程 我应该在捆绑包中查看哪里 实际上
  • Android 设备安装新字体

    我需要在我的 Android 设备上安装泰米尔字体 是否可以在 Android 设备中安装新的 Unicode 字体 您可以将自己的字体嵌入到自己的应用程序中供自己使用 您无法将字体添加到现有设备 除非作为自定义固件构建的一部分 或者可能通
  • Swift 将 .uppercaseString 仅应用于字符串的第一个字母

    我正在尝试制作一个自动更正系统 当用户输入大写字母的单词时 自动更正不起作用 为了解决这个问题 我复制了键入的字符串 应用了 lowercaseString 然后比较它们 如果字符串确实输入错误 则应该更正该单词 然而 替换键入的单词的单词
  • 使用概念来选择类模板专业化

    这个问题演示如何使用 C 20 概念进行选择超载 for a function模板 我正在尝试做类似的事情 选择专业化 for a class模板 我从一个类模板开始Angle
  • 使用 pandas 从 zip 中读取特定的 csv 文件

    这是我感兴趣的一个数据 http fenixservices fao org faostat static bulkdownloads Production Crops E All Data zip 它由 3 个文件组成 我想用 panda
  • 连接未知数量的列和行[重复]

    这个问题在这里已经有答案了 几天来我一直在尝试一些东西 但我真的很迷失 有人可以帮我吗 我想将 Excel 中的列从第一列连接到最后一个非空列 并在每列之间添加逗号 接下来 我想应用从第一行到最后一个非空行的循环 我成功地使用已知数量的列
  • 使用 Google Apps 脚本将所有工作表转换为 PDF

    我正在尝试将包含多个工作表的 Google 电子表格转换为 PDF 文件 下面的脚本有效 但它仅创建包含电子表格最后一页的 PDF function savePDFs SpreadsheetApp flush var ss Spreadsh
  • 如何在 Mac OS X 上强制使用 64 位 python?

    使用 arch x86 64 选项编译 sip 时出现以下错误 prosseek siplib smcho python c import sip print sip Traceback most recent call last File
  • Qt4 + matplotlib 的 mplot3d

    我正在尝试在 Qt4 GUI 中嵌入 3D 绘图 有其他按钮 这可以使用 matplotlib 的 mplot3d 吗 我知道可以使用 matplotlib backends backend qt4agg 绘制二维图 并且我已经这样做了 如