皮拉布表演()“QCoreApplication::exec:事件循环已在运行”

2024-10-01 15:31:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个使用matplotlib和QT4Agg后端的Python图像查看器程序。 功能之一是从2D-FFT生成2D功率谱,并将其放在一个图形内的第二个绘图中。我想添加的是一个按钮,它获取FFT图像并将其弹出到另一个窗口中,这样就可以对其进行更详细的分析。在

我的代码目前正在做我需要它做的所有事情,但是它也向终端发出了某种QT异常或警告(这是在OS X下运行的):

“QCoreApplication::exec:事件循环已在运行”

def popout(event):
    nfig, nfftax = pylab.subplots(1, 1)
    imgtoconv = getArr(files[imgindex])
    fftimg = np.abs(fftpack.fftshift(fftpack.fft2(imgtoconv)))**2
    nfftax.imshow(np.log10(fftimg), cmap=cm.Greys_r)
    pylab.show()

我定义了一个按钮,并通过点击按钮(弹出) 在程序的主循环中,启动一个图形,并用两个曲线图显示。所以皮拉布表演()已被调用一次

我遇到的问题似乎是我打电话来了皮拉布表演()再次生成异常或警告事件循环已启动。在

我试着用pylab.图纸()而不是皮拉布表演()但当我这样做时,按钮的点击并没有显示新的数字

有没有一种简单的方法来抑制这个警告?或者,有没有其他方法可以生成新的图形并使其在不需要回忆的情况下可见皮拉布表演()? 在

编辑:我也试着增加nfig.canvas.draw文件()创建新图形和新轴后,调用pylab.图纸()位于popout()函数的末尾。这仍然没有显示新的数字点击

编辑2:切换到使用TKAgg后端并调用皮拉布表演()使问题消失。你知道为什么这只是QT4Agg后端的问题吗?在


Tags: 图像程序fft图形警告np事件按钮
1条回答
网友
1楼 · 发布于 2024-10-01 15:31:03

你试过使用ion()吗?我在使用按钮回调中的多个数字时也遇到了同样的问题。对我来说,在popout()函数中使用此代码解决了问题:

import matplotlib.pyplot as p
import numpy as np
p.ion()
p.close(1)
p.close(2)

p.figure(1)
p.plot(np.random.normal(size=100))

p.figure(2)
p.plot(np.random.normal(size=100))

据我所知,这会迫使matplotlib使用自己的线程来处理所有图形,而不会与GUI的主循环相冲突。我关闭图形以完全重置它们并释放内存,但是p.clf()也可以。在

相关问题 更多 >

    热门问题