【坑】Tkinter ‘NoneType‘ object has no attribute ‘destroy‘

'T^_^T'發表於2020-12-15

用Tkinter的元件時遇到,無法摧毀/隱藏/放置的情況
AttributeError: ‘NoneType’ object has no attribute ‘place’
AttributeError: ‘NoneType’ object has no attribute ‘place_forget’
AttributeError: ‘NoneType’ object has no attribute ‘destroy’

出現這個錯誤的原因,舉個例子:

# 寫法一:c = a().b()式寫法
# 由於 pack(), place(), grid() 的返回值是'None'
# 這樣 self.subBar 得到的返回值是 'None',
# 而不是我們希望的 a 的返回值
# 執行到 'destroy()'的時候,就會出以下錯誤
# AttributeError: 'NoneType' object has no attribute 'destroy'
self.subBar = Frame(self.backGround,bg='#FFFFFF').place(x=10,y=75,width=100,height=5)
.....
.....
self.subBar.destroy()
# 寫法二:
# c = a.()
# c.b()
# 這樣 c 得到的是 a 的返回值,
# 後面的 'destroy()' 就可以正常執行了 
self.subBar = Frame(self.backGround,bg='#FFFFFF')
self.subBar.place(x=10,y=75,width=100,height=5)
.....
.....
self.subBar.destroy()

忽略了 place() 的賦值。。。

相關文章