matplotlib图表嵌入tkinter框架时不显示、仅占空间无报错问题求助
问题核心原因
你用plt.plot()绘制的折线图,是输出到matplotlib默认维护的独立画布中,并没有渲染到你专门为嵌入tkinter创建的fig = Figure()对象上,这个fig全程是空的,所以只会占用布局空间,不会显示任何内容。
修正方案
- 抛弃
plt.plot的全局绘制方式,在自己创建的fig上新增子图后执行绘制 - 调整
canvas.draw()的调用时机到绘图完成之后 - 删除重复的画布pack操作
- 可选:将导航栏的父容器改为和画布同属一个frame,避免布局错位
修正后的代码(仅修改matplot方法即可)
def matplot(self,parent): new_frame = Frame(self.detailed_frame,width=150,height=150) new_frame.pack() test_label = Label(new_frame,text='hello',font='Arial 16 bold') test_label.pack() # 在自定义的Figure对象上创建子图,再绘制内容 fig = Figure(figsize=(4, 4), dpi=100) ax = fig.add_subplot(111) # 添加1行1列第1个子图 ax.plot([120, 2, 3, 4], [120, 4, 9, 16], '-o') # 用子图对象绘制,不要用plt.plot canvas = FigureCanvasTkAgg(fig, master = new_frame) # 绘图完成后再刷新画布 canvas.draw() get_widz = canvas.get_tk_widget() get_widz.pack(side=TOP, fill=BOTH, expand=1) # 导航栏父容器可以改成new_frame,和画布放在同一区域,按需调整即可 toolbar = NavigationToolbar2Tk(canvas, new_frame) toolbar.update()
内容的提问来源于stack exchange,提问作者doctor_senpai69
相关产品推荐
相关产品推荐

