Macos 以编程方式为Mac OS X上的Matplotlib选择正确的后端

Macos 以编程方式为Mac OS X上的Matplotlib选择正确的后端,macos,python-3.x,matplotlib,tkinter,Macos,Python 3.x,Matplotlib,Tkinter,我有一个集成tkinter GUI和matplotlib绘图(使用pyplot)的程序。要让这个程序在各种Mac平台上正常运行,我遇到了无尽的麻烦。主要问题似乎是后端的适当选择 在某些情况下,程序运行良好,没有问题。在其他情况下,我遇到了中记录的类似问题。实现上面概述的解决方案可以解决这个问题,但是其他系统会出现其他错误。这些其他错误的解决方案似乎是使用Qt4Agg后端 必须有一些标准的方法同时使用tkinter和matplotlib来获取程序,以便更好地使用Mac。如何以编程方式确保使用了正确

我有一个集成tkinter GUI和matplotlib绘图(使用pyplot)的程序。要让这个程序在各种Mac平台上正常运行,我遇到了无尽的麻烦。主要问题似乎是后端的适当选择

在某些情况下,程序运行良好,没有问题。在其他情况下,我遇到了中记录的类似问题。实现上面概述的解决方案可以解决这个问题,但是其他系统会出现其他错误。这些其他错误的解决方案似乎是使用Qt4Agg后端

必须有一些标准的方法同时使用tkinter和matplotlib来获取程序,以便更好地使用Mac。如何以编程方式确保使用了正确的后端,以使Mac用户的程序不会崩溃

很抱歉,如果这是一个模糊的问题,但这是一个非常广泛的问题。

请参阅以下答案:

本质上,如果您不知道哪个
后端
可用,则以下代码应加载当前计算机上可用的第一个
后端
。(我只包括了4个后端,还有很多其他的)


更新:我相信OSX有一个名为
MacOSX
的后端,可以添加到该列表中,尽管我自己没有办法测试它。

确认
MacOSX
确实有效(在Mojave/10.14上测试)
import matplotlib
gui_env = ['TKAgg','GTKAgg','Qt4Agg','WXAgg']
for gui in gui_env:
    try:
        print("testing", gui)
        matplotlib.use(gui,warn=False, force=True)
        from matplotlib import pyplot as plt
        break
    except:
        continue
print("Using:",matplotlib.get_backend())

Using: GTKAgg