Tkinter / matplotlib osx上的多个活动窗口

我有一个如下的脚本,在我的Windows机器上执行

import matplotlib.pyplot as plt import numpy as np import tkinter class main(tkinter.Frame): #main window def __init__(self, root): # initialise tkinter.Frame.__init__(self) self.root = root tkinter.Button(self, text='New spots', command=self.newSpots).grid() def newSpots(self): x = np.random.rand(10) y = np.random.rand(10) plt.scatter(x,y) plt.show() if __name__=='__main__': root = tkinter.Tk() app = main(root).grid() root.mainloop() 

当在窗口上运行时,它会用一个简单的button打开一个窗口,点击这个button打开一个matplotlib查看器,并在随机位置绘制10个点。 随后每按一下button又增加10个点。

在mac上执行此代码会生成相同的初始窗口,并且首次按下该button会生成图并按预期打开查看器。 但是,直到观看者窗口closures,才能与原始窗口(只有观看者的控件工作)交互。 我如何使Windows机器上的mac镜像上的行为?

我发现这个问题的解决方案 – 似乎matplotlib默认为Windows上的TkAgg后端(我不确定这是一个普通的Windows的东西,或特定于任何特定的安装在计算机上)。

将以下行添加到脚本的顶部会强制TkAgg后端,并在两台机器上导致相同的行为。

 import matplotlib matplotlib.use("TkAgg")