【发布时间】:2014-12-03 20:14:01
【问题描述】:
我有一个基本的 Python 图像查看器程序,使用 matplotlib 和 QT4Agg 后端。 其中一项功能是从 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()
我定义了一个按钮并通过 Button.on_clicked(popout) 链接到 popout() 函数 在程序的主循环中,启动了一个图形并显示了两个图。所以 pylab.show() 已经被调用过一次
我遇到的问题似乎是我再次调用 pylab.show() 会生成异常或警告事件循环已启动。
我尝试使用 pylab.draw() 而不是 pylab.show() 但是当我这样做时,按钮单击不会显示新图形
有没有简单的方法来抑制这个警告?或者是否有另一种方法可以在不调用 pylab.show() 的情况下生成新图形并使其可见?
编辑:我还尝试在创建新图形和新轴之后添加 nfig.canvas.draw(),然后在 popout() 函数的末尾调用 pylab.draw()。这仍然没有在点击时显示新图
EDIT2:切换到使用 TKAgg 后端并调用 pylab.show() 使问题消失。关于为什么这只是 QT4Agg 后端中的一个问题的任何想法?
【问题讨论】:
标签: python qt exception-handling pyqt4