python - osx 上的 Tkinter/matplotlib 多个事件窗口

标签 python windows macos matplotlib tkinter

我有一个在我的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()

在 Windows 上运行时,它会打开一个带有简单按钮的窗口,单击此按钮会打开一个 matplotlib 查看器,其中在随机位置绘制了 10 个点。随后每次按下按钮都会再添加十个点。

在 Mac 上执行这段代码会产生相同的初始窗口,第一次按下按钮会生成绘图并按预期打开查看器。但是,在查看器窗口关闭之前,无法与原始窗口进行交互(只有查看器上的控件可以工作)。如何使 mac 上的行为与 windows 机器上的行为相同?

最佳答案

我找到了这个问题的解决方案——matplotlib 似乎默认为 Windows 上的 TkAgg 后端(我不确定这是一般的 Windows 问题,还是特定于机器上的任何特定安装)。

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

import matplotlib
matplotlib.use("TkAgg")

关于python - osx 上的 Tkinter/matplotlib 多个事件窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39368979/

相关文章:

python - OpenCV 确定交叉/重叠区域

python - 与许多分类器的验证准确性相比,训练集的准确性出奇地低。这是正常的吗?

python - 一次从列表中删除多个索引 - python

windows - 批处理 : files in directory to variable

适用于 MacOS 的 Java 应用程序安装程序

cocoa - FSEvents 神秘地无法传递某些文件夹中的事件

node.js - 由于 node-api@ELIFECYCLE,npm 启动失败

Python C 扩展 - 在每个纯 C 调用周围添加 Py_BEGIN_ALLOW_THREADS 有什么危害?

java - 如何在不列出文件的情况下获取 Windows 计算机文件数?

phpsdk_deps 在 Windows 上返回 fatal error