2014-12-03 59 views
3

我有一個使用matplotlib和QT4Agg後端的Python基本圖像查看器程序。 其中一個功能是從2D-FFT生成2D功率譜,並將其放置在一個圖中的第二個圖中。我想添加的是一個按鈕,它將FFT圖像彈出並將其彈出到另一個窗口,以便更詳細地分析它。pylab.show()「QCoreApplication :: exec:事件循環已經在運行」

我的代碼目前正在做的一切,我需要它,但它也提高某種形式的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(跳隙) 定義並鏈接到跳隙()函數在程序的主循環中的按鈕的圖被啓動,並且具有兩個所示地塊。所以pylab.show()已經被調用過一次

我遇到的問題似乎是我再次調用pylab.show(),它正在生成異常或警告事件循環已經啓動。

我嘗試使用pylab.draw()而不是pylab.show(),但是當我這樣做,按一下按鈕不會顯示新圖

有一種簡單的方法來禁止這種警告?還是有另一種方法來產生新的圖形,並使其可見而不回想pylab.show()?

編輯:我也嘗試添加nfig.canvas.draw()後創建新圖和新軸,然後在popout()函數結束時調用pylab.draw()。這仍然沒有顯示新的數字onclick

EDIT2:切換到使用TKAgg後端和調用pylab.show()使問題消失。任何想法爲什麼這只是QT4Agg後端的一個問題?

回答

3

您是否嘗試過使用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()也適用。

+0

我必須在某個時候檢查fi這個工程。 我已經改變了我的代碼,以通過PyQt4在QT中嵌入mpl – 2015-03-24 16:40:51