2017-10-17 69 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) 
相關問題