相关疑难解决方法(0)

Pyside的Matplotlib与Qt设计师(PySide)

我一直在寻找一个工作示例,如何在pyside中嵌入matplotlib图,该图是使用QT设计器创建的,同时将逻辑保存在单独的文件中.我知道网上有很多例子,但它们都没有实际使用QT设计器,然后创建一个单独的文件来添加matplitlib图添加到窗口小部件的逻辑.我找到了一个'几乎'的例子http://blog.rcnelson.com/building-a-matplotlib-gui-with-qt-designer-part-1/,但是在我的版本中,"改变layoutName"是不可能的.属性从"verticalLayout"到"mplvl"".

所以我有以下具体问题:我不清楚Pyside Qt设计师可以嵌入哪个项目.它是一个简单的"小部件"(因为pyside中没有matplotlib小部件可用).如果是这样,我怎么才能将情节添加到该小部件?或者我是否必须使用Qt Designer创建"FigureCanvas"?这有可能吗?如果是这样,怎么样?

这是Pyside Qt设计师在嵌入小部件时可以做的最简单的设计(这是正确的吗?).我现在如何在它上面添加一个matplotlib图?

正如我在其中一个答案中所建议的,我现在将Qwidget提升为MyStaticMplCanvas,并将Qwidget的名称编辑为mplvl.

使用Pyside Qt设计器自动生成的文件,并使用pyside-uic ui.ui -o ui.py -x编译

ui.py看起来像这样:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'gui.ui'
#
# Created: Wed Apr 20 14:00:02 2016
#      by: pyside-uic 0.2.15 running on PySide 1.2.2
#
# WARNING! All changes made in this file will be lost!

from PySide import QtCore, QtGui

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(444, 530)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.mplvl = MyStaticMplCanvas(self.centralwidget)
        self.mplvl.setGeometry(QtCore.QRect(120, 190, …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pyside

9
推荐指数
1
解决办法
1537
查看次数

在PyQt GUI中嵌入和更新matplotlib图时内存泄漏

我试图嵌入一个matplotlib图,每秒更新一次PyQt GUI主窗口.

在我的程序中,我threading.Timer通过timer下面显示的函数每秒调用一次更新函数.我有一个问题:我的程序每秒都会变大 - 每4秒钟大约1k.我最初的想法是append函数(返回一个新数组update_figure)不会删除旧数组?这可能是我问题的原因吗?

def update_figure(self):
    self.yAxis = np.append(self.yAxis, (getCO22()))
    self.xAxis = np.append(self.xAxis, self.i)
    # print(self.xAxis)
    if len(self.yAxis) > 10:
        self.yAxis = np.delete(self.yAxis, 0)

    if len(self.xAxis) > 10:
        self.xAxis = np.delete(self.xAxis, 0)

    self.axes.plot(self.xAxis, self.yAxis, scaley=False)
    self.axes.grid(True)

    self.i = self.i + 1

    self.draw()
Run Code Online (Sandbox Code Playgroud)

这是我的计时器功能 - 这是通过点击我的PyQt GUI中的按钮触发,然后调用自己,如您所见:

def timer(self):
    getCH4()
    getCO2()
    getConnectedDevices()
    self.dc.update_figure()
    t = threading.Timer(1.0, self.timer)
    t.start()
Run Code Online (Sandbox Code Playgroud)

编辑:我无法发布我的整个代码,因为它需要很多.dll包含.所以我将尝试解释这个程序的功能.

在我的GUI中,我想显示我的CO 2值随着时间的推移.我的get_co22函数只返回一个浮点值,我100%肯定这个工作正常.使用我的计时器,如上所示,我想继续为matplotlib图添加一个值 - 该Axes对象可供我使用self.axes.我尝试绘制数据的最后10个值.

编辑2:在聊天中进行了一些 …

python matplotlib python-3.x

5
推荐指数
1
解决办法
930
查看次数

如何在 PyQt5 GUI 中快速绘制 matplotlib 实时绘图

几年前,我已经尝试过matplotlib在 GUI 中嵌入实时绘图PyQt5。实时绘图显示从传感器捕获的实时数据流、某些过程……我已经成功了,您可以在此处阅读相关帖子:

现在我需要再次做同样的事情。我记得我以前的方法有效,但无法跟上快速的数据流。我在互联网上找到了一些示例代码,我想将它们呈现给您。其中一个显然比另一个快,但我不知道为什么。我想获得更多见解。我相信更深入的了解将使我能够保持互动PyQt5matplotlib高效。

 

1.第一个例子

这个例子基于这篇文章:
https://matplotlib.org/3.1.1/gallery/user_interfaces/embedding_in_qt_sgskip.html
该文章来自官方matplotlib网站,并解释了如何在PyQt5窗口中嵌入matplotlib图形。

我对示例代码做了一些细微的调整,但基本原理仍然是相同的。请将以下代码复制粘贴到 Python 文件中并运行:

#####################################################################################
#                                                                                   #
#                PLOT A LIVE GRAPH IN A PYQT WINDOW                                 #
#                EXAMPLE 1                                                          #
#               ------------------------------------                                #
# This code is inspired on:                                                         #
# https://matplotlib.org/3.1.1/gallery/user_interfaces/embedding_in_qt_sgskip.html  #
#                                                                                   #
#####################################################################################

from __future__ import annotations
from typing import *
import sys
import os
from matplotlib.backends.qt_compat …
Run Code Online (Sandbox Code Playgroud)

python plot matplotlib python-3.x pyqt5

5
推荐指数
1
解决办法
2万
查看次数

PyQt和matplotlib

plt.show()从PyQt应用程序调用matplotlib函数.我总是有警告:

QCoreApplication::exec: The event loop is already running
Run Code Online (Sandbox Code Playgroud)

似乎matplotlib调用了一个已经启动的新QCoreApplication如何删除此警告?谢谢

qt pyqt matplotlib

3
推荐指数
1
解决办法
2310
查看次数

标签 统计

matplotlib ×4

python ×3

python-3.x ×2

plot ×1

pyqt ×1

pyqt5 ×1

pyside ×1

qt ×1