程序在使用tkinter和pyplot时提前结束

时间:2018-03-02 13:48:03

标签: python matplotlib tkinter

我尝试将UI作为输入,然后关闭它,然后使用pyplot进行一些绘图。但是,当我尝试使用tkinter运行脚本并导入matplotlib.pyplot时,程序终止于脚本中的root = Tk(),并且不会在此行之后运行任何命令(包括mainloop)

有没有办法在同一个脚本中同时使用tkintermatplotlib.pyplot

我正在运行的用户界面是:

from tkinter import *

class InputSelect(Frame):
    def __init__(self, master):
        self.master = master
        Frame.__init__(self, master, width=200, height=200)
        self.fillCanvas()

    def fillCanvas(self):
        self.canvas = Canvas(self, width=200, height=200)
        self.canvas.pack()

        self.aButton = Button(self, text="a", height=1, width=15, command=self.buttontest)
        self.aButtonWindow = self.canvas.create_window(100, 80, window=self.aButton)

        self.pack()

    def buttontest(self):
        print("buttontest")

def generateInputSelect():
    print("test")
    root = Tk()
    print("test2")
    app = InputSelect(root)
    app.mainloop()

if __name__ == "__main__":
    generateInputSelect()

这可以自行运行,但是如果我在一个单独的脚本中使用它:

import ui
import matplotlib.pyplot


ui.generateInputSelect()

控制台打印"测试"然后关闭,它没有达到" test2"。如果我删除import matplotlib.pyplot,则会按预期运行此单独脚本。

1 个答案:

答案 0 :(得分:0)

经过一番讨论和进一步研究后,通过终端运行程序导致我发现错误terminating with uncaught exception of type NSException

我可以通过使用

手动设置TkAgg后端来修复此错误
import matplotlib
matplotlib.use("TkAgg")
from matplotlib import pyplot as plt

DonCristobal在Matplotlib Crashing tkinter Application

的建议

此问题似乎与MacOS有关,这就是为什么某些用户无法复制错误的原因。