蟒蛇修复'NoneType'对象没有属性'删除'
问题描述:
我猜这个问题已经发布了几次,但我从Python 3开始,我不明白如何解决这个错误,我试过但。 ..请有人可以帮助我吗? 我必须制作一个咖啡配送系统,这里的目的是: 给出的硬币必须是5,10或25,如果他给出了一个坏硬币,那么客户有4个测试,总数必须达到55瑞士法郎,所以它必须抓住直到获得CHF 55蟒蛇修复'NoneType'对象没有属性'删除'
import os
import datetime
import time
from tkinter import *
from tkinter.filedialog import *
class Welcome():
def __init__(self,master):
self.master = master
self.master.title('coffee distributor')
self.master.geometry('700x400+0+0')
self.title = Label(self.master, font=('arial', 35, 'bold'),text='[coffee distributor]',relief='solid', bg='powder blue' , fg='darkslategray', padx=20, pady=20).place(x=10, y=10)
self.menu1 = Button(self.master, font=('Helvetica',16,'bold') , text='[order coffee]' , padx=30 , relief='sunken',bg='darkslategray' ,fg='white', command=self.gotocmd).place(x=150,y = 140)
def gotocmd(self):
root = Toplevel(self.master)
myGui1 = OrderCoffee(root)
class OrderCoffee():
def __init__(self ,master):
self.coin = IntVar()
self.c_25 = self.c_10 = self.c_5 = self.error = 0
self.total = 0
self.master = master
self.master.title('coffee distributor')
self.master.geometry('900x400+0+0')
self.frame1 = Frame(self.master, relief=RAISED, borderwidth=1, bg='darkslategray').pack(fill=BOTH, expand=True)
self.info = Label(self.master, font=('arial', 15, 'bold'), text="[To order a coffee, please enter a coin \n The price of one cup of coffee is set at CHF 55 \n We accept that the following coins: [10, 25, 50]", padx=20, pady=20,relief='sunken', bg='darkslategray' ,fg='white').place(x=170 , y=10)
self.info2 =Label(self.master, text="[dashboard ]", padx=10 , pady=10, relief='sunken', bg='darkslategray' ,fg='white').place(x=10 , y=120)
self.rapport = Text(self.master , width=50 , height=10 , bg='powder blue', fg='darkslategray').place(x=10 , y=160)
self.lb_piece = Label(self.master , text="[enter a coin ]", font=('arial', 15, 'bold'), padx=10, pady=10,relief='sunken', bg='darkslategray' ,fg='white').place(x=500 , y=160)
self.input_piece = Entry(self.master, textvariable=self.coin, justify='right', font=('arial', 15, 'bold'), bd=5 ,relief='sunken', bg='powder blue' ,fg='white').place(x=500, y=220)
self.cmd = Button(self.master , text="order", font=('arial', 15, 'bold'), bd=4 ,relief='sunken', bg='darkslategray' ,fg='white' , command=self.verification).place(x=500, y=270)
self.ncmd = Button(self.master, text="back", font=('arial', 15, 'bold'), bd=4,relief='sunken', bg='darkslategray' ,fg='white').place(x=650, y=270)
#methode pour afficher resultat
def result(self):
self.rapport.delete()
self.rapport.insert(END, '5 coin :\t\t' + str(self.c_5) + '\n')
self.rapport.insert(END, '10 coin:\t\t' + str(self.c_10) + '\n')
self.rapport.insert(END, '25 coin :\t\t' + str(self.c_25) + '\n')
self.rapport.insert(END, 'error :\t\t' + str(self.error) + '\n')
self.rapport.insert(END, 'TOTAL \t\t' + str(self.total) + '\n')
#méthode qui réçoit une pièce pour compter
def add_coin(self):
coin = int(self.coin.get())
if self.coin == 5:
self.c_5 +=1
self.total += 5
elif self.coin == 10:
self.c_10 +=1
self.total += 10
elif self.coin == 25:
self.c_25 += 1
self.total += 25
else:
self.error +=1
def verification(self):
if self.total >= 55:
self.result()
print('done')
else:
self.add_coin()
self.result()
print('add again')
def main():
root = Tk()
First = Welcome(root)
root['bg'] ='darkslategray'
root.mainloop()
if __name__ == '__main__':
main()
我不知道如何解决这个错误:
"C:\Users\dell computer\AppData\Local\Programs\Python\Python36\python.exe" "C:/Users/dell computer/PycharmProjects/projet/test.py"
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\dell computer\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 1699, in __call__
return self.func(*args)
File "C:/Users/dell computer/PycharmProjects/projet/test.py", line 73, in verification
self.result()
File "C:/Users/dell computer/PycharmProjects/projet/test.py", line 45, in result
self.rapport.delete()
AttributeError: 'NoneType' object has no attribute 'delete'
预先感谢您
答
使用几何管理.pack()
,.place()
或.grid()
在声明的小部件上将导致变量的值为None
,这是因为几何管理器返回None
。
这意味着声明如下...
Label = Label(root, text="Text").place()
是否意味着Label
等于None
与NoneType
类型。
所以试图做到这一点...
Label.destroy()
实际上意味着你要做到这一点...
NoneType.destroy()
你应该做的却是类似的如下:
Label = Label(root, text="Text")
Label.place()
这意味着Label
等于一个tk Label
小部件。所以你可以在其上执行像.destroy()
这样的功能。
答
这条线的问题是:
self.rapport = Text(self.master , width=50 , height=10 , bg='powder blue', fg='darkslategray').place(x=10 , y=160)
当您链方法调用一样,你指定上次调用您的变量,这将是None
在place()
箱子返回值。将呼叫分开,并把它们放在一条线上。但是,当您解决该问题时,还有另一个问题 - 您需要在您的result
函数中删除时指定索引:
self.rapport.delete('1.0', END)