由于错误而未显示图:AttributeError:'NoneType'对象没有属性'set_canvas'

时间:2019-04-17 08:08:58

标签: python matplotlib tkinter

我正在尝试在弹出窗口中显示图。

这是用于绘制图形。

class Sheet:

    def plot_sheet(self):
        fig,ax = plt.subplots(1)
        ax.set_xlim([0, self.W]) 
        ax.set_ylim([0, self.L]) 
        recs = []
        for i in range(len(self.rect_list)):
            if self.rect_rotate[i]:
                ax.add_patch(patches.Rectangle((self.rect_pos[i][0], self.rect_pos[i][1]), self.rect_list[i].l, self.rect_list[i].w,linewidth=3,edgecolor='r'))
            else:
                ax.add_patch(patches.Rectangle((self.rect_pos[i][0], self.rect_pos[i][1]), self.rect_list[i].w, self.rect_list[i].l,linewidth=3,edgecolor='r'))
        #plt.show()
        return fig

使用此plot_sheets是因为要显示的图形数取决于输入。

class Indiv:

    def plot_sheets(self):
        for i in range(len(self.sheets)):
            self.sheets[i].plot_sheet()

这就是我展示图表的方式。

fig = best.plot_sheets()

dataPlot = FigureCanvasTkAgg(fig, master = window)
dataPlot.show()
dataPlot.get_tk_widget().pack(side='top', fill='both', expand=1)

运行代码,出现此错误。

  

Tkinter回调中的异常

     

回溯(最近通话最近一次):

     

调用

中的文件“ C:\ Users \ sel \ Anaconda3 \ lib \ tkinter__init __。py”,行1705      

返回self.func(* args)

     

文件“”,第112行,在       procedure_button1 = tk.Button(画布,文本=“组件嵌套计划(제조사용)”,字体=“ calibri 11”,command = lambda:cal_culate1())

     

文件“”,第232行,位于cal_culate1中       dataPlot = FigureCanvasTkAgg(fig,master = window)

     

文件“ C:\ Users \ sel \ Anaconda3 \ lib \ site-packages \ matplotlib \ backends_backend_tk.py”,第204行, init       超级(FigureCanvasTk,自身)。初始化(图)

     

文件“ C:\ Users \ sel \ Anaconda3 \ lib \ site-packages \ matplotlib \ backend_bases.py”,行1618, init       Figure.set_canvas(self)

     

AttributeError:“ NoneType”对象没有属性“ set_canvas”

如何恢复此错误?

1 个答案:

答案 0 :(得分:1)

您的代码存在一些无法解决的问题,因为您没有解释所需的输出,并且您没有提供完整的代码。

  1. plot_sheet()返回一个图形实例
  2. plot_sheets()创建了许多图形实例,但均未返回(因此返回None
  3. FigureCanvasTkAgg()期望一个图形实例,但是您似乎试图提供多个图形实例,因为您想传递best.plot_sheets()
  4. 的结果