2016-04-22 73 views
0

試圖使用堆棧()添加和刪除一個圓圈。我得到一個我不確定的錯誤。試圖在隨機位置和隨機大小中添加一個圓圈。這是我的班級試圖使用堆棧()添加形狀

class Stack: 
def __init__(self): 
    self.items = [] 

def is_empty(self): 
    return self.items == [] 

def push(self, item): 
    self.items.append(item) 

def pop(self): 
    return self.items.pop() 

def peek(self): 
    return self.items[len(self.items) - 1] 

def size(self): 
    return len(self.items) 

這是我的其他班。我得到這個錯誤>>> AttributeError的: '直腸' 對象有沒有屬性 '堆'

from tkinter import * 
import random 
root = Tk() 
from Stack import Stack 

class Recta: 

def __init__(self, height=60, width=80): 
    self.height = height 
    self.width = width 
    self.create_buttons() 
    self.canvas = Canvas(root) 
    self.canvas.pack() 
    stack = Stack() 



def create_buttons(self): 
     self.frame = Frame(root, bg='grey', width=400, height=40) 
     self.frame.pack(fill='x') 
     self.button1 = Button(self.frame, text='Oval', command=randomCircle) 
     self.button1.pack(side='left', padx=10) 
     self.button2 = Button(self.frame, text = "Remove Oval") 
     self.button2.pack(side = 'left') 

def randomCircle(self): 
    w = random.randrange(300) 
    h = random.randrange(200) 
    self.stack.push(self.canvas.create_oval(0,0,w,h,fill= random.choice(self.colours))) 

TES = RECTA() root.mainloop()

+0

你能否詳細說明是什麼問題以及它到底是什麼,你需要知道什麼? –

回答

0
在初始化它應該是獨立

。 stack = Stack()not stack = Stack()

+0

菜鳥錯誤抱歉。爲了做一個刪除功能,你會使用pop()? –

+0

我沒有得到你的問題.. –

+0

我想嘗試刪除形狀。爲了做到這一點,我必須創建另一個功能,彈出堆棧頂部的形狀? –

0

這是有用的東西。

你真的需要學習the code proposed earlier爲了能夠重複它的各種形狀和情況。 :)

from tkinter import * 
import random 

class Stack: 
    def __init__(self): 
     self.items = [] 

    def is_empty(self): 
     return self.items == [] 

    def push(self, item): 
     self.items.append(item) 

    def pop(self): 
     return self.items.pop() 

    def peek(self): 
     return self.items[len(self.items) - 1] 

    def size(self): 
     return len(self.items) 



class Recta: 

    def __init__(self, height=60, width=80): 
     self.height = height 
     self.width = width 
     self.create_buttons() 
     self.canvas = Canvas(root) 
     self.canvas.pack() 
     self.stack = Stack()  # <-- must be self.stack 

    def create_buttons(self): 
     self.frame = Frame(root, bg='grey', width=400, height=40) 
     self.frame.pack(fill='x') 
     self.button1 = Button(self.frame, text='Oval', command=self.randomCircle) # <- must be self.randomCircle 
     self.button1.pack(side='left', padx=10) 
     self.button2 = Button(self.frame, text = "Remove Oval", command=self.remove_oval)  # <-- must have a command method to be able to do anything 
     self.button2.pack(side = 'left') 

    def randomCircle(self): 
     w = random.randrange(300) 
     h = random.randrange(200) 
     self.stack.push(self.canvas.create_oval(0, 0, w, h, fill='blue')) 

    def remove_oval(self): # <-- must have a method to correspond to the command in button2 
     try: 
      a = self.stack.pop() 
      self.canvas.delete(a) 
     except: 
      pass 

root = Tk() 
tes = Recta() 
root.mainloop() 

remove_oval也可以採取下列的方法class Stack()優勢寫着:

def remove_oval(self): 
    if not self.stack.is_empty(): 
     self.canvas.delete(self.stack.pop()) 
+0

我註釋了代碼以指出最明顯的錯誤。你必須認真花時間閱讀和理解這段代碼,否則你會譴責自己每次發生錯誤都要問一個問題。 –

+0

[如何接受答案](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) - [爲什麼接受答案很重要](http ://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235) –