Tkinter / Matplotlib后端冲突导致无限主循环

时间:2013-07-08 20:50:12

标签: python matplotlib tkinter

考虑运行以下代码(注意它是一个非常简化的版本来演示问题):

import matplotlib.pyplot as plot
from tkinter import * #Tkinter if your on python 2

def main():

    fig = plot.figure(figsize=(16.8, 8.0))

    root = Tk()
    w = Label(root, text="Close this and it will hang!")
    w.pack()
    root.mainloop()

    print('Code never reaches this point')

if __name__ == '__main__':
    main()

关闭第一个窗口可以正常工作,但关闭第二个窗口会导致代码挂起,因为root.mainloop()会导致无限循环。调用fig = plot.figure(figsize=(16.8, 8.0))会导致此问题。在做出matplotlib.pyplot调用之后,有没有人知道如何让root成功关闭?

2 个答案:

答案 0 :(得分:7)

import matplotlib
from tkinter import *

def main():

    fig = matplotlib.figure.Figure(figsize=(16.8, 8.0))

    root = Tk()
    w = Label(root, text="Close this and it will not hang!")
    w.pack()
    root.mainloop()

    print('Code *does* reach this point')

if __name__ == '__main__':
    main()

Tkinter窗口中嵌入matplotlib图时,请使用matplotlib.figure.Figure而不是plt.Figure

答案 1 :(得分:0)

我通过"关闭"解决了matplotlib与Tkinter冲突的问题。在打开Tkinter窗口之前,matplotlib绘图(绘图完成后):

plt.close()
tk = Tkinter()
...