标签: pyqtgraph

Pyqt4-pyqtgraph应用程序以递归方式打开自身的新实例

我为我的项目分叉了BMDanalyse并对其进行了修改.

安装说明,以防您需要帮助.实际问题如下.

由于内存要求,需要64位系统.请确保您拥有64位Python 2.7.

以下设置说明适用于Windows或Ubuntu 上的Pycharm,但您希望在Windows上运行它,因为我的问题是制作.exe:

需要以下包.别忘了选择64位的.在提供链接的情况下,您不能简单地通过Pycharm安装软件包.

打开BMDanalyse项目后,您应该可以运行SPCanalyse.py以启动应用程序.它有bug,是一个非常早期的原型.下载以下示例数据以确保其按预期工作.

如果按顺序执行,以下内容应该有效.您当然可以检查IDE的控制台以了解应用程序正在执行的操作(尚未添加进度条)

  1. 单击文件,加载图像,加载两个图像.点击"对齐".在应用程序执行其操作后,名为的文件aligned.raw应出现在"下载"文件夹中
  2. 加载alignment.raw图像.'alignment.raw'将出现在右侧列表中.单击alignment.raw.单击ROI,添加ROI - >多边形.绘制两个多边形,如下图所示: 在此输入图像描述 获得投资回报率后,单击"分析" - >"投资回报率分析".ROI.raw应该出现在您的下载文件夹中.
  3. 加载ROI.raw.单击它.单击时间过滤器.一段时间后dfoverf0_avg_framesIncl.raw应该出现在您的下载文件夹中
  4. 加载dfoverf0_avg_framesIncl.raw.单击它.屏幕应该变黑.如果它们仍在那里,请删除ROI.现在点击黑色场景中的随机位置.你看到的是种子像素相关图

如果所有这4个步骤都正常工作,那么应用程序就可以按照预期在您的系


实际问题

但是,现在它正在工作,我需要一个独立的.exe这个应用程序,没有任何依赖只是为了向我的主管显示它可以完成.

如果我python SPCanalyse.py在项目中使用我的主脚本,它会运行,我的应用程序会弹出.

更新:我的笔记本电脑被盗了.然而,在一个干净的系统上设置一切我遇到了不同的问题.我能想到的唯一一件不同的主要事情就是我不依赖于Continuum分析中的Anaconda进行包管理.

如果我pyinstaller SPCanalyse.py在我的主脚本上使用,我会得到.exe,如果我运行.exe,我首先注意到我的图标丢失了.其次,这发生了:

在此输入图像描述

当我按下对齐按钮(即通过设置中的步骤1)时,应用程序冻结(即没有响应),然后重复打开自身的新的等级.我假设这是与内存相关的,因为此操作确实需要大量的内存.如果我看一下应用程序占用了多少内存(仅查看原始的"无响应"实例),我每次都看到它的平均值为1,180.8MB.考虑到所有其他正在运行的进程,尽管我仍然只使用了32%内存的28%.我已经尝试将应用程序的优先级设置为高到无效.我也尝试通过命令提示符打开,看看我是否收到任何有用的错误消息.可悲的是没有.

请注意,步骤2-3按预期工作!单击黑色场景后,步骤4将产生相同的递归开放循环.

我想我找到了这里发生的事情的解释:https: //github.com/rdicosmo/parmap

当然,如果您碰巧有开放频道,文件或其他只应由父进程使用的连接,您的程序可能会以非常奇怪的方式运行:例如,在调用之前不要打开图形窗口Parmap原语,如果您的程序是多线程的,请不要使用此库!

因此我很确定我使用parmap非常错误.我仍然困惑为什么我的应用程序工作,如果我通过我的IDE运行我!

旧的未解决的问题,现在是我的小偷的问题

pyinstaller SPCanalyse.py当我尝试运行生成的.exe时,如果我在我的主脚本上使用以下输出

D:\Home\Downloads\BMDanalyse\BMDanalyse>D:\Home\Downloads\BMDanalyse\BMDanalyse\
dist\SPCanalyse\SPCanalyse.exe
Traceback …
Run Code Online (Sandbox Code Playgroud)

executable pyinstaller pyqt4 python-2.7 pyqtgraph

13
推荐指数
1
解决办法
518
查看次数

在pyqtgraph中实现实时绘图的最简单方法是什么?

我不知道如何在pyqtgraph中实现实时绘图.该文档的实现尚未在文档中实现.

有谁可以提供一个简单的例子?

python pyqt pyqt4 python-2.7 pyqtgraph

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

如何在缩放,平移,调整大小时更新pyqtgraph图像数据

我正在使用PySide.在里面QMainWindow,我有一个ImageItem显示在里面PlotWidget.

假设我有一个generateImage(r, np)可以动态生成图像的功能.该函数为位于正方形内的图像(实际坐标)返回npx np像素数组(-r, -r)-(r, r).我希望轴显示真实坐标,而不是像素坐标.

  1. 如果我放大/缩小,我想生成相同数量的像素,但是在更小/更大的正方形内(在实际坐标中);
  2. 如果我翻译图像,我需要生成一个更大的正方形和更多像素的图像,以使用相同的分辨率显示interrest区域;
  3. 如果我调整窗口大小,我需要生成不同数量的像素,以保持显示图像的分辨率相同.

我的代码实际上是这样的:

graph = PlotWidget()
image = ImageItem()
graph.addItem(image)
graph.setAspectLocked(True)  # to keep the pixels square

r = 10e-6  # 10 µm
np = 101  # but should be related to number of pixels in the window
image.setImage(generateImage(r, np))
image.setRect(QRectF(-r, -r, 2*r, 2*r))
Run Code Online (Sandbox Code Playgroud)

我的猜测是使用sigRangeChanged信号来检测视图中的变化.但是,我不确定如何检测窗口的大小和分辨率,以及如何正确更新图像.

我天真地尝试做这样的事情:

graph.sigRangeChanged.connect(updateRange)

def updateRange(view, rng):
    r = max(abs(rng[0][0]), abs(rng[0][1]),
            abs(rng[1][0]), abs(rng[1][1]))
    image.setImage(generateImage(r, np)) …
Run Code Online (Sandbox Code Playgroud)

pyqtgraph

12
推荐指数
0
解决办法
885
查看次数

在pyqtgraph中绘制大型数组

对于电生理学数据分析集,我需要绘制一个大的2D阵列(昏暗的约20.000 x 120)点.我曾经在我的PyQt应用程序中嵌入了一个Matplotlib小部件,但是寻找其他解决方案因为绘图花了很长时间.尽管如此,使用pyqtgraph绘制数据也需要比预期更长的时间,这可能是因为它在每次使用plot()函数时都会重新绘制小部件.

绘制大型数组的最佳做法是什么?

pyqtgraph的例子虽然广泛,但对我没有太大的帮助......

import pyqtgraph as pg
view = pg.GraphicsLayoutWidget()
w1 = view.addPlot()

for n in data:
    w1.plot(n)
Run Code Online (Sandbox Code Playgroud)

要么

w1.plot(data)
Run Code Online (Sandbox Code Playgroud)

最后一条规则生成ValueError:操作数无法与形状一起广播(10)(10,120)

提前致谢....

python pyqt pyqtgraph

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

pyqtgraph 轴显示不正确

我最近在将 pyqt 从 PyQt4 更新到 PyQt5 后开始使用 PyQt5,并注意到使用 pyqtgraph 生成的所有绘图的轴位置存在持续错误(参见附图)。x 轴不延伸穿过窗口底部,y 轴不与左下角的 x 轴连接。此外,在较大的 x 值或较小的 y 值处,轨迹不能由轴标签准确地表示。

下图是通过运行产生的:

import pyqtgraph as pg
pg.plot([0,1,2,3,4,5,6,7,8,9],[1,2,4,5,7,8,10,11,13,14])
Run Code Online (Sandbox Code Playgroud)

pyqtgraph输出

我在我的 Windows 10 机器上使用 anaconda 创建了一个新的 python 环境来测试这个问题。conda list qt的输出是:

pyqt                      5.6.0                    py35_2
pyqtgraph                 0.10.0                   py35_0
qt                        5.6.2                    vc14_5  [vc14]
Run Code Online (Sandbox Code Playgroud)

我尝试使用不同版本的 Python(3.5.3 和 3.6)并删除并重新安装所有 anaconda 发行版,但没有成功。我真的很感激任何有关这个问题的帮助。提前致谢。

编辑 1:我应该提到我是在外部显示器上运行这个程序的。我刚刚发现,如果我将绘图窗口拖动到较小的笔记本电脑显示屏上,轴就会捕捉到正确的位置。我仍然没有发现如何在外部显示器上正确显示绘图,但我怀疑它可能与 QT DPI 缩放环境变量有关。

python qt pyqtgraph pyqt5 windows-10

10
推荐指数
1
解决办法
2992
查看次数

使用 PyQtGraph 绘制日期时间对象

我是 PyQtGraph 的新手,需要帮助在 x 轴上绘制日期时间对象,这可以使用 matplotlib 轻松完成。任何帮助,将不胜感激。

作为 Id 想要做的简单版本,请参见下面我想绘制的日期时间对象,该对象显示为 x 轴上的刻度。

代码抛出错误,因为这无法完成。

import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
import datetime

datetimes = ['2014-10-01 00:00:00', '2014-10-02 00:00:00', '2014-10-03 00:00:00']
x = [datetime.datetime.strptime(i, '%Y-%m-%d %H:%M:%S') for i in datetimes]
y = [1,2,3]


win = pg.GraphicsWindow(title = 'plotting')
p1 = win.addPlot(row=1, col=0, title = 'test')
p1.plot(x,y)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
Run Code Online (Sandbox Code Playgroud)

python datetime pyqtgraph

9
推荐指数
2
解决办法
4794
查看次数

Python pyqtgraph如何在图上设置x和y轴限制,没有自动量程

我想知道如何设置为pyqtgraph.GraphicsWindow.addPlot对象显示的x和y轴限制.我需要在循环中显示大量数据(因此使用pyqtgraph)但我宁愿预先分配我的轴而不是允许自动量程可能提高速度.举个例子,

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
app = QtGui.QApplication([])
win = pg.GraphicsWindow(title="My plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')
p1 = win.addPlot(title="plot1")
p2 = win.addPlot(title="plot2")
curve1 = p1.plot(pen='y')
curve2 = p1.plot(pen='r')
curve3 = p2.plot(pen='b')
x = np.linspace(0,10,1000)
x_current = x[0]
p1.setXRange((5,20), padding=0)
for i in range(1,len(x)):
    x_current = np.append(x_current,x[i])
    curve1.setData(x_current,np.sin(x_current))
    curve2.setData(x_current,np.cos(x_current))
    curve3.setData(x_current,np.tan(x_current))
    app.processEvents()

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
        QtGui.QApplication.instance().exec_()
Run Code Online (Sandbox Code Playgroud)

问题在于线p1.setXRange((5,20),padding=0).这会导致错误:TypeError:setXRange()至少需要3个参数(给定3个)

我认为这应该是一个非常简单的问题,只需在绘图前设置轴范围.

python plot axis graph pyqtgraph

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

PyQtGraph开场然后马上关闭

我正在运行文档中的一些基本代码

import pyqtgraph as pg
import numpy as np
x = np.arange(1000)
y = np.random.normal(size=(3, 1000))
plotWidget = pg.plot(title="Three plot curves")
for i in range(3):
    plotWidget.plot(x, y[i], pen=(i,3))
Run Code Online (Sandbox Code Playgroud)

但由于某种原因,窗户打开然后立即关闭,我只是看到它的闪烁.是否有某种功能可以保持窗户打开?

谢谢

python pyqt pyqtgraph

8
推荐指数
2
解决办法
1024
查看次数

如何使用 PyQtGraph 的 DateAxisItem?

我在 Python 3.6.2(32bit) 和 Windows 10 上使用 PyQtGraph '0.9.8+gd627e39'。

我的目标是使用显示日期时间的 X 轴绘制实时数据。

Time                                                Value
datetime.datetime(2018, 3, 1, 9, 36, 50, 136415)    10
datetime.datetime(2018, 3, 1, 9, 36, 51, 330912)    9
datetime.datetime(2018, 3, 1, 9, 36, 51, 382815)    12
datetime.datetime(2018, 3, 1, 9, 36, 52, 928818)    11
...
Run Code Online (Sandbox Code Playgroud)

查了https://gist.github.com/friendzis/4e98ebe2cf29c0c2c232 , pyqtgraph , plotting time series等相关问题 ,但还是很难掌握怎么用DateAxisItem

我尝试使用该模块制作一个简单的代码,

import numpy as np
import pyqtgraph as pg
from pyqtgraph.Qt import QtCore, QtGui
from datetime import datetime
from time import time …
Run Code Online (Sandbox Code Playgroud)

python pyqtgraph

8
推荐指数
1
解决办法
3044
查看次数

在pyqtgraph中的x轴上显示字符串值

我想在x轴上显示刻度的字符串值pyqtgraph.现在我无法弄清楚如何做到这一点.

例如:

x = ['a', 'b', 'c', 'd', 'e', 'f']
y = [1, 2, 3, 4, ,5, 6]
pg.plot(x, y) 
Run Code Online (Sandbox Code Playgroud)

当我尝试将字符串数组传递给x变量时,它会尝试将其转换为float并使用错误消息中断GUI.

python qt pyqt pyqt4 pyqtgraph

7
推荐指数
2
解决办法
8004
查看次数

标签 统计

pyqtgraph ×10

python ×8

pyqt ×4

pyqt4 ×3

python-2.7 ×2

qt ×2

axis ×1

datetime ×1

executable ×1

graph ×1

plot ×1

pyinstaller ×1

pyqt5 ×1

windows-10 ×1