首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

matplotlib tkinter AttributeError:'AxesSubplot‘对象没有属性'canvas’,matplotlib图形直到我调整tkinter窗口的大小后才会更新

问题分析

你遇到的错误 AttributeError: 'AxesSubplot' object has no attribute 'canvas' 通常是因为在matplotlib的某些版本中,AxesSubplot 对象确实没有 canvas 属性。这个错误通常出现在使用Tkinter作为matplotlib的后端时,尤其是在调整窗口大小后。

基础概念

  • matplotlib: 是一个用于创建静态、交互式和动画可视图的开源Python库。
  • Tkinter: 是Python的标准GUI(图形用户界面)库。
  • AxesSubplot: 是matplotlib中的一个类,用于创建子图。

相关优势

  • matplotlib: 提供了丰富的绘图功能,支持各种图表类型和定制选项。
  • Tkinter: 轻量级且易于使用,适合快速开发小型应用程序。

应用场景

  • matplotlib: 适用于数据分析和科学计算中的数据可视化。
  • Tkinter: 适用于需要简单图形界面的应用程序,如小型工具和原型设计。

问题原因

这个错误通常是因为matplotlib的某些版本中,AxesSubplot 对象没有 canvas 属性。调整Tkinter窗口大小时,matplotlib的图形更新机制可能会触发这个错误。

解决方法

以下是一个示例代码,展示如何在Tkinter中使用matplotlib,并确保图形在调整窗口大小后正确更新:

代码语言:txt
复制
import tkinter as tk
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
import matplotlib.pyplot as plt

def update_graph():
    fig, ax = plt.subplots()
    ax.plot([1, 2, 3, 4], [10, 20, 25, 30])
    canvas.draw()

root = tk.Tk()
root.title("Matplotlib in Tkinter")

fig, ax = plt.subplots()
ax.plot([1, 2, 3, 4], [10, 20, 25, 30])

canvas = FigureCanvasTkAgg(fig, master=root)
canvas.draw()
canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=1)

root.bind("<Configure>", lambda event: canvas.draw())

update_button = tk.Button(root, text="Update Graph", command=update_graph)
update_button.pack(side=tk.BOTTOM)

root.mainloop()

参考链接

解释

  1. 创建Tkinter窗口: 使用 tkinter 创建主窗口。
  2. 创建matplotlib图形: 使用 matplotlib.pyplot 创建图形。
  3. 集成matplotlib与Tkinter: 使用 FigureCanvasTkAgg 将matplotlib图形嵌入到Tkinter窗口中。
  4. 更新图形: 通过绑定 <Configure> 事件,确保在调整窗口大小后图形能够正确更新。

通过这种方式,可以有效避免 AttributeError: 'AxesSubplot' object has no attribute 'canvas' 错误,并确保图形在调整窗口大小后正确更新。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

matplotlibtkinter 集成小案例 (上篇)

matplotlib 是绘图界最通用库,功能强大,与其他系统集成友好,比如Python内置绘图模块tkinter,这篇文章主要目标:实现一个使用tkinter集成matplotlib交互绘图案例。...此案例,创建tkinter窗口及组件代码,如下: window = tk.Tk() # 第2步,给窗口可视化起名字 window.title('My Window') # 第3步,设定窗口大小...下面就是最重要tkintermatplotlib集成部分,matplotlib提供FigureCanvasTkAgg对象,只需三行代码,实现图形绘制在tkinterCanvas中: canvas_l...figure对象(matplotlib对象)与frame对象(tkinter组件)关系建立,第二行使用集成对象draw方法绘图,最后拿到tkinter组件并组装到tkinter中。...最终实现展示效果如下: ? 交互部分,选中Radiobutton中bar选项,仅显示柱状图: ? 选中pie选项时,仅显示饼状图: ? 当选中both选项,恢复全部显示。

2.1K30
  • python笔记:可视化界面写作尝试

    他有点像是使用matplotlib进行绘图方式,首先创建一个基础画布(基础窗口),然后定义不同绘图曲线(窗口插件),然后将定义曲线(窗口插件)放置到画布(窗口)上进行显示。...tkinter.Tk()进行实例化,而后我们只需要在其中加入组件就行了; 窗口可以通过title函数进行窗口命名; 窗口可以通过geometry方法进行窗口大小设置。...窗口类包含主要方法包括: mainloop():启动窗口,并循环更新状态; quit():关闭窗口; Tk类事实上还包含有大量其他方法,但是文档中没有很好说明,而且似乎也并不常用,有兴趣读者可以直接阅读源码进行学习...grid方法必须在组件已经配置到窗口界面之后才会起效,即其必须写在pack函数之后!...不过总体而言事实上感觉是有点累赘,毕竟tkinter这个库真心就只适合做做简单窗口写作,不适合用于真正大规模复杂窗口界面写作当中(大约也就是因为这个原因,官网文档才会如此坑爹吧)。

    4.6K30

    一篇文章教小白会Python 绘制Android CPU和内存增长曲线

    后续需要关注文章: 关注苏州程序大白,持续更新技术分享。谢谢大家支持 ?️‍?目录 ?开讲啦!!!!...1、实现效果 一开始想通过采集CPU和内存数据,导出到Excel生成增长曲线图表。做了下调研,并没有比较好实现方法。...在Python中需要指明参数类型,解析获取到JSON对象值之后,Python并不会根据参数来判断是什么类型,需要指明要转化对象参数类型,比如把系统时间戳转化成float值类型:float(memoryData...instantiate an Agg canvas 在脚本文件开头显示声明Agg使用: import matplotlib matplotlib.use('Agg') import matplotlib.pyplot...在matplotlib中,轴Axes位置以标准化图形坐标指定,可能发生情况是轴标签、标题、刻度标签等等会超出图形区域,导致显示不全。后面加上tight_layout自适应调用之后问题修复。

    1K20

    庆祝法国队夺冠:用Python放一场烟花秀

    Tkinter应用基本设置如下: root = tk.Tk() 复制代码 为了能初始化Tkinter,我们必须创建一个Tk()根部件(root widget),它是一个窗口,带有标题栏和由窗口管理器提供其它装饰物...这里打包方法是告诉Tkinter调整窗口大小以适应所用小部件。窗口到我们进入Tkinter事件循环,被root.mainloop()调用时才会出现。...在我们关闭窗口前,脚本会一在停留在事件循环。 将烟花绽放转译成代码 现在我们设计一个对象,表示烟花事件中每个粒子。...每个粒子都会有一些重要属性,支配了它外观和移动状况:大小,颜色,位置,速度等等。...该函数会展示所有的数据项,并根据我们设置时间更新每个数据项属性。在我们主代码中,我们会用一个alarm处理模块after()调用此函数,after()会等待一定时间,然后再调用函数。

    1.9K10

    基于Python手把手教你实现一个遗传算法(含具体源码,以及UI演变过程)

    首先,我们需要安装Python和相关科学计算库,前提是已经安装了Python环境,并使用pip安装了numpy、matplotlibtkinter库。...其中,numpy和matplotlib库将在遗传算法实现中起到重要作用,而tkinter库用于构建图形用户界面。下面将按照以下步骤来实现带有图形用户界面的遗传算法。...具体操作步骤如下所示:import numpy as npimport matplotlib.pyplot as pltimport tkinter as tkfrom matplotlib.backends.backend_tkagg...这里使用tkinter库创建一个简单窗口,并在窗口中显示遗传算法演变过程,具体操作如下所示:window = tk.Tk()window.title("Genetic Algorithm Visualization...,也就是关键所在,这里设定迭代次数为100次,并在每次迭代更新图形界面,具体代码如下所示:num_iterations = 100best_fitness = []for iteration in range

    2.8K52

    Matplotlib 中文用户指南 7.2 Python shell 中使用 Matplotlib

    默认情况下,matplotlib 将绘图延迟到脚本结束,因为绘图可能是开销大操作,并且你可能不想在每次更改单个属性更新绘图,而是只在所有属性更改更新一次。...调用figure()并弹出图形窗口,调用plot()使你数据出现在图形窗口中。...ipython 还为你启用交互模式,这会导致每个 pyplot 命令触发图形更新,并且还提供了一个 matplotlib 感知运行命令,来高效运行 matplotlib 脚本。...ipython 在运行命令期间关闭交互模式,然后在运行结束时恢复交互状态,以便你可以手动继续调整图形。...控制交互式更新 pyplot接口interactive属性控制是否在每个pyplot命令上绘制图画布。

    1.2K20

    属于入门Python库

    很多人觉得tkinter对于PythonGUI编程来说是一块鸡肋,属于入门Python库。其实,tkinter没有你想象中那么一无是处。 一无是处?...tkinter是个不错Python库哦 如果你愿意,甚至可以使用tkinter来制作一个类似matplotlib库供大家使用。今天,带大家使用tkinter制作一个散点图和折线图。...tkinter也可以是很好绘图工具 01Canvas绘制过程 创建Canvas对象 语法格式如下: w=Canvas( master, option=value,**kwargs) master...options: 可选项,即该按钮可设置属性。这些选项可以用键=值形式设置,并以逗号分隔。...调用方法绘制图形 调用方法绘图 canvas提供方法有很多,常用绘制基本图形方法有: 两步搞定,这样就可以绘制简单图形了。下面举几个例子演示图形绘制过程。

    81400

    有趣python代码_python五角星代码

    Tkinter应用基本设置如下: root = tk.Tk 为了能初始化Tkinter,我们必须创建一个Tk根部件(root widget),它是一个窗口,带有标题栏和由窗口管理器提供其它装饰物。...这里打包方法是告诉Tkinter调整窗口大小以适应所用小部件。窗口到我们进入Tkinter事件循环,被root.mainloop调用时才会出现。在我们关闭窗口前,脚本会一在停留在事件循环。...将烟花绽放转译成代码 现在我们设计一个对象,表示烟花事件中每个粒子。每个粒子都会有一些重要属性,支配了它外观和移动状况:大小,颜色,位置,速度等等。...这里我们设置让粒子每0.01秒更新它们状态,在1.8秒之后停止更新(这意味着每个粒子存在时间为1.6秒,其中1.2秒为“绽放”状态,0.4秒为“坠落”状态,0.2秒处于Tkinter将其完全移除前边缘状态...该函数会展示所有的数据项,并根据我们设置时间更新每个数据项属性。在我们主代码中,我们会用一个alarm处理模块after调用此函数,after会等待一定时间,然后再调用函数。

    1.4K10

    实战 | 用Python放一场浪漫烟花秀!

    Tkinter应用基本设置如下: root = tk.Tk() 为了能初始化Tkinter,我们必须创建一个Tk()根部件(root widget),它是一个窗口,带有标题栏和由窗口管理器提供其它装饰物...这里打包方法是告诉Tkinter调整窗口大小以适应所用小部件。窗口到我们进入Tkinter事件循环,被root.mainloop()调用时才会出现。...在我们关闭窗口前,脚本会一在停留在事件循环。 将烟花绽放转译成代码 现在我们设计一个对象,表示烟花事件中每个粒子。...每个粒子都会有一些重要属性,支配了它外观和移动状况:大小,颜色,位置,速度等等。...该函数会展示所有的数据项,并根据我们设置时间更新每个数据项属性。在我们主代码中,我们会用一个alarm处理模块after()调用此函数,after()会等待一定时间,然后再调用函数。

    2.9K10

    纯干货:手把手教你用Python做数据可视化(附代码)

    你可以使用plt.figure生成一个新图片: In [16]: fig = plt.figure() 在IPython中,一个空白绘图窗口就会出现,但在Jupyter中则没有任何显示,直到我们使用一些其他命令...▲图4 增加子图数据可视化 你可以在matplotlib官方文档中找到完整图形类型。...这个间距都是相对于图高度和宽度来指定,所以如果你通过编程或手动使用GUI窗口调整大小,那么图就会自动调整。...参考在线matplotlib展览馆,可以学习更多注释范例。 绘制图形时有更多需要注意地方。matplotlib含有表示多种常见图形对象,这些对象引用是patches。...幸运是,几乎所有的默认行为都可以通过广泛全局参数来定制,包括图形大小、子图间距、颜色、字体大小和网格样式等等。

    4.7K21

    软件测试|超好用超简单Python GUI库——tkinter(十四)

    前言 我们知道我们可以使用pillow绘制不同形状图形,但是我们能不能使用tkinter实现这个功能呢,当然可以,tkinter也可以实现图形绘制,并且可以将绘制图形添加到我GUI中。...基本属性 属性 方法 background(bg) 指定 Canvas 控件背景颜色 borderwidth(bd) 指定 Canvas 控件边框宽度 closeenough 指定一个距离,当鼠标与画布对象距离小于该值时...Canvas 画布上绘制图形)被选中时背景色 selectborderwidth 指定当画布对象被选中时边框宽度(选中边框) selectforeground 指定当画布对象被选中时前景色 state...一般情况下,默认主窗口左上角为坐标原点,这种坐标系被称作为“窗口坐标系”,但也会存在另外一种情况,即画布大小可能大于主窗口,当发生这种情况时,可以采用带滚动条 Canvas 控件,此时会以画布左上角为坐标原点...,绘制图像如下: 图片 总结 本文主要介绍了tkinter画布控件canvas基本属性,包括绘制简单线条,后续我们将使用Canvas控件绘制更多图形

    90410

    Python中tkinter模块常用参数总结

    Button   按钮;Canvas   绘图形组件,可以在其中绘制图形;Checkbutton 复选框;Entry    文本框(单行);Text...Scrollbar 滚动条;配合使用canvas, entry, listbox, and text窗口部件标准滚动条;Toplevel 用来创建子窗口窗口组件。...(在Tkinter窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。)...修改图形属性,第一个参数为图形ID,后边为想修改参数;move    移动图像(1,4,0),1为图像对象,4为横移4像素,0为纵移像素,然后用root.update()刷新即可看到图像移动...;widget      引起事件组件;width,heigh       组件改变大小,仅Configure有效;x,y         鼠标当前位置,相对于窗口

    82730

    Python GUI编程学习笔记之tkinter控件介绍及基本使用方法详解

    ,所有控件都需要附着在界面上,如果程序中没有指定控件附着窗口,将默认附着到主窗口Tk中,如果程序中没有定义Tk,那么将自动创建一个 常见属性【想要初始化主窗口属性需要使用 主窗口对象.属性(“参数”...常用参数设置【可以在创建按钮时候指定,也可以创建使用 按钮对象.config() 来设置】: text:按钮上文本显示 anchor:按钮上内容位置[取值:n, ne, e, se, s, sw...Frame默认是没有大小,所以必须要设置高度和宽度,而当加了控件到Frame它会“缩水”【这里缩水是因为Frame自动缩小到刚好能包裹控件】,需要在显示时候强制设置大小比如pack(fill=X)...,只有添加其他菜单,才会了实际意义 要想显示菜单,必须在“要添加菜单窗口对象config中允许添加上“菜单对象” ?...类似label窗口部件,但是能够自动地调整文本到给定宽度或比率。 ? 参数设置:与Label类似 由于Label也可以显示多行文本,就逐渐少用Message了。”””

    9.5K10

    基于卷积神经网络CNN图像分类

    、搭建CNN模型及可视化、模型训练与预测、损失精度可视化 将构建CNN网络模型保存,基于Tkinter制作一个简单GUI界面,选择图片运行立即显示分类结果 过程详解,代码注释极其详细,源码运行即可出结果...("800x600") # 设置图形窗口宽和高 top.title("Cats and Dogs Classification Bases on Keras-CNN") # 标题设置 top.configure...搭建预测分类函数 def classify(file_path): global label_packed image = Image.open(file_path) # 导入图片调整大小...# place: relx, rely代表窗口大小所对应x, y坐标比例 classify_b.place(relx=0.8,rely=0.5) 图片加载功能 如何使用tkinter...创建文件并返回文件流对象 tkinter.filedialog.askopenfilename():选择打开文件,返回文件名 tkinter.filedialog.askopenfile():选择打开文件

    1.4K20

    GUI编程基础知识点总结

    其实在python GUI 编程(图形用户界面编程)里可以实现将程序窗口化,可以引入 tkinter 模块,自己电脑上没有的话用 pip安装即可。...本篇文章小编就分享一些python GUI 编程基础,后续还会更新一些更深层次技巧。...通过上述代码,可以得到一个空窗口; 可以手动为窗口添加属性,最基本几种属性如下: title() 括号里面参数为代表窗口名称字符串; resizable(x,y) 窗口可以在 x和y轴上可变化调度...对刚刚窗口添加属性: from tkinter import * window = Tk() window.title(‘我爱python’)window.geometry(‘380×420’)window.resizable...常见组件如下: Button 按钮; Canvas图形组件,可以在其中绘制图形; Checkbutton 复选框; Entry 文本框(单行); Text 文本框(多行); Frame 框架,将几个组件组成一组

    2.1K10

    如何用Python过一个完美的七夕节?

    Python提供了多个图形开发界面的库,常用Tkinter,xwPython,Jython。...Tkinter是Python标准GUI库,内置在Python中,不需要额外安装,对于一些简单图形界面可以轻松实现。...也就是说explore_points是列表中套列表,内层列表是每个烟花所有颗粒对象,外层列表是所有烟花。 所有的颗粒对象完成,就开始对每个颗粒生命时间进行更新,且总时间设定在1.8秒以内。...root:Tkinter对象; cv:定义了Tkinter中背景画布对象,其中height和width参数可根据实际进行调整; image:打开图像对象,图像将被作为画布中背景,图像可根据自己喜好自行选择...; photo:使用ImageTk定义了Tkinter图像对象; 然后将在画布对象上创建一个图像(使用定义photo对象作为参数),最后调用Tkinter对象root进行持续不断地simulate

    2.9K10

    Python3中tkinter模块使用方法详解

    按钮;     Canvas          绘图形组件,可以在其中绘制图形;     Checkbutton      复选框;     Entry           文本框(...滑块;允许通过滑块来设置一数字值     Scrollbar        滚动条;配合使用canvas, entry, listbox, and text窗口部件标准滚动条;     Toplevel...(在Tkinter窗口部件类没有分级;所有的窗口部件类在树中都是兄弟。) ...;     itemconfig          修改图形属性,第一个参数为图形ID,后边为想修改参数;     move               移动图像(1,4,0),1为图像对象,4为横移...;     widget               引起事件组件;     width,heigh        组件改变大小,仅Configure有效;     x,y

    4.5K21
    领券