在程序python函数中使用PyQt4和matplotlib时,我在Mac OSX 10.12上遇到了一个奇怪的行为。
该功能弹出一个对话框,用于选择目录。读取此目录中的文件,并使用matplotlib.pyplot绘制其数据。
问题是,当matplotlib显示绘图窗口时,还会在matplotlib窗口后面生成其他空白窗口。只有在我的函数中包含PyQt代码时才会生成这些额外的窗口。
当我关闭matplotlib窗口时,脚本会挂起,如果我关闭其他空白窗口,则函数退出而不执行函数中的剩余代码。
有没有其他人获得这些额外的窗户?我有这种感觉,如果我用它来选择我的目录之后能以某种方式“退出PyQt应用程序循环”,那么这将解决问题。这是我的直觉/猜测,尝试这样做的尝试都失败了。
以下是显示调用plt.show()
时弹出的额外窗口的屏幕截图:
这是我的代码:
import os
import sys
from PyQt4.QtGui import *
import numpy as np
import matplotlib.pyplot as plt
def qt_mpl_test():
home = os.path.expanduser('~')
print('Select data top directory...')
app = QApplication(sys.argv)
w = QWidget()
dat_dir = QFileDialog.getExistingDirectory(w, 'Select data top directory', home)
dat_dir = str(dat_dir)
## At this stage I load in my data files for processing / plotting
## For the sake of simplicity, generate some data below
x = np.array([1, 2, 3, 4, 5, 6, 7])
y = np.array([1, 2, 3, 4, 3, 2, 1])
fig, ax = plt.subplots(1, 1)
ax.plot(y, x)
plt.show()
qt_mpl_test()