【问题标题】:Tkinter AttributeError: 'AxesSubplot' object has no attribute 'canvas' and matplotlib graphs don't update until I resize the tkinter windowTkinter AttributeError: 'AxesSubplot' 对象没有属性 'canvas' 并且 matplotlib 图形在我调整 tkinter 窗口大小之前不会更新
【发布时间】:2021-05-29 14:47:35
【问题描述】:

tkinter 画布上的 Matplotlib 图给出错误 - 'AxesSubplot' 对象没有属性 'canvas'

# Create window
window = tkinter.Tk()
window.resizable()
window.state('zoomed')


# Create Title
window.title('Title')


# adding frame of buttons
BFrame = tkinter.Frame(window)
BFrame.pack(side=tkinter.TOP)    

# This defines the Python GUI backend to use for matplotlib
matplotlib.use('TkAgg')

# Initialize matplotlib figure for graphing purposes
fig = Figure(figsize=(5,3), dpi = 100)

global sbpt_1, sbpt_2, sbpt_3

sbpt_1 = fig.add_subplot(1, 3, 1)
sbpt_2 = fig.add_subplot(1, 3, 2)
sbpt_3 = fig.add_subplot(1, 3, 3)


#Rotating x-ticks
sbpt_1.tick_params(axis='x', rotation=45)
sbpt_2.tick_params(axis='x', rotation=45)
sbpt_3.tick_params(axis='x', rotation=45)


#Subplot Titles
sbpt_1.title.set_text('Title A \n')
sbpt_2.title.set_text('Title B \n')
sbpt_3.title.set_text('Title C \n')
fig.suptitle('VISUALIZE FILES')


# Tight layout often produces nice results
# but requires the title to be spaced accordingly
fig.tight_layout()
fig.subplots_adjust(top=0.82)


# Special type of "canvas" to allow for matplotlib graphing
display = FigureCanvasTkAgg(fig, master=window)
display.draw()
display.get_tk_widget().pack(side=TOP, fill=BOTH, expand=1)

#Navigator
toolbar = NavigationToolbar2Tk(display, window)
toolbar.update()
display._tkcanvas.pack(side=BOTTOM, fill=BOTH, expand=1)

.................

def plot_utm():
    content.plot (color = '#3BB9FF', ax = sbpt_1)
    sbpt_1.canvas.draw()
    
def plot_tm():
    shp_TM.plot(color = '#4CC417', ax = sbpt_2)
    sbpt_2.canvas.draw()
    
def plot_om():  
    shp_TMOM.plot(color = '#FFA62F', ax = sbpt_3)
    sbpt_3.canvas.draw()

.........

# To make the window running
window.mainloop()

出现此错误。:

即使在单击可视化按钮后也可以在 Tkinter Canvas 上绘图:

完整代码的这些行存在问题。 如果我运行此代码,则会出现错误 - 'AxesSubplot' 对象没有属性 'canvas' 点击可视化按钮后,绘图不会出现在画布上,但如果我使用最小化/最大化按钮调整窗口大小,绘图就会出现。

【问题讨论】:

    标签: python matplotlib graph tkinter-canvas axes


    【解决方案1】:

    通过更新函数解决问题

    def plot_utm():
        sbpt_1 = fig.add_subplot(1, 3, 1) 
        content.plot (color = '#3BB9FF', ax = sbpt_1)
        display.draw_idle()
        
    def plot_tm():
        sbpt_2 = fig.add_subplot(1, 3, 2)
        shp_TM.plot(color = '#4CC417', ax = sbpt_2)
        display.draw_idle()
        
    def plot_om():
        sbpt_3 = fig.add_subplot(1, 3, 3)
        shp_TMOM.plot(color = '#FFA62F', ax = sbpt_3)
        display.draw_idle()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-18
      • 2013-07-10
      • 2020-07-12
      • 2021-01-10
      • 2019-02-02
      • 1970-01-01
      相关资源
      最近更新 更多