2017-10-17 72 views
-2

我猜这个问题已经发布了几次,但我从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' 

预先感谢您

回答

0

使用几何管理.pack().place().grid()在声明的小部件上将导致变量的值为None,这是因为几何管理器返回None

这意味着声明如下...

Label = Label(root, text="Text").place() 

是否意味着Label等于NoneNoneType类型。

所以试图做到这一点...

Label.destroy() 

实际上意味着你要做到这一点...

NoneType.destroy() 

你应该做的却是类似的如下:

Label = Label(root, text="Text") 
Label.place() 

这意味着Label等于一个tk Label小部件。所以你可以在其上执行像.destroy()这样的功能。

0

这条线的问题是:

self.rapport = Text(self.master , width=50 , height=10 , bg='powder blue', fg='darkslategray').place(x=10 , y=160) 

当您链方法调用一样,你指定上次调用您的变量,这将是Noneplace()箱子返回值。将呼叫分开,并把它们放在一条线上。但是,当您解决该问题时,还有另一个问题 - 您需要在您的result函数中删除时指定索引:

self.rapport.delete('1.0', END) 
相关问题