我正在尝试使用matplotlib在python tkinter上创建一个条形图。除了当我关闭tkinter(控制台)窗口时,它才能正常工作。
在关闭我的控制台之前,我已经关闭了我的tkinter窗口,因此我不确定它指的是哪个进程“仍在运行”。当我选择杀死它时,它会给我这个错误消息:
只有当我嵌入了matplotlib代码时才会发生这种情况。当我从我的脚本中删除我的matplotlib代码时,它不再给我这个消息并且工作正常。我的代码如下:
导入我的剧本
import Tkinter as tk
import matplotlib
matplotlib.use('TkAgg')
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2TkAgg
from matplotlib.backend_bases import key_press_handler
from matplotlib.figure import Figure
from datetime import datetime
Matplotlib相关代码
frame=tk.Frame(parent,width=900,height=500,bg='lightgreen',relief='groove',bd=1)
frame.place(x=10,y=10)
fig=plt.figure()
ax=fig.add_subplot(211)
canvas = FigureCanvasTkAgg(fig, master=frame)
canvas.show()
canvas.get_tk_widget().pack(side='top', fill='both', expand=1)
canvas._tkcanvas.pack(side='top', fill='both', expand=1)
toolbar = NavigationToolbar2TkAgg(canvas,frame )
toolbar.update()
canvas._tkcanvas.pack(side='top', fill='both', expand=1)
def on_key_event(event):
key_press_handler(event, canvas, toolbar)
导致问题的原因是什么?
我使用的是带有python 2.7.4的windows8(64位),用于python 2.7的matplotlib 1.2.0(64位)
答案 0 :(得分:3)
你有多个gui事件循环运行(来自你的TK,一个plt
启动)。请勿导入plt
或mlab
。有关如何正确嵌入Tk
的信息,请参见http://matplotlib.org/examples/user_interfaces/embedding_in_tk.html。
您基本上需要更改此行
fig=plt.figure()
到
fig = Figure()
并删除导入中的plt
。