从队列前面取出对象

dequeue object from front of queue

我正在尝试在我的 tkinter 程序中从队列的前面取出一个随机形状。我尝试了 is_empty() 方法,但似乎出现错误。

>>> AttributeError: 'Queue' object has no attribute 'pop'.

如有帮助将不胜感激!
这是队列 class 我正在使用

class Queue:
  def __init__(self):
    self.items = []
  def is_empty(self):
    return self.items == []
  def size(self):
    return len(self.items)
  def enqueue(self, item):
    self.items.insert(0, item)
  def dequeue(self):
    return self.items.pop(0)
  def peek(self):
    return self.items[0]

class直肠:

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



def remove_triangle(self):
    if not self.queue.is_empty(): 
         self.canvas.delete(self.queue.pop())

我正在查看 Queue 的 Python 文档 (see here),但我没有看到名为 pop 的方法。也许这就是你错误的原因。但是,我能看到的是以下方法:

Queue.get([块[ 超时]]) 从队列中删除并 return 一个项目。如果可选参数 block 为 true 且超时为 None(默认值),则在必要时阻止直到项目可用。如果超时是正数,它最多会阻塞超时秒数,如果在该时间内没有可用的项目,则会引发 Empty 异常。否则(块为假),return 一个项目,如果一个项目立即可用,否则引发 Empty 异常(在这种情况下忽略超时)。

版本 2.3 中的新功能:超时参数。

也许它符合你的目的。

你不需要写你自己的class。 Python 在其标准库中提供了一个 Queue 数据结构。您可以使用来自 collections.

deque 数据结构
from collections import deque
q = deque()
q.append(5)
print q.pop()

请参阅 deque here 的文档。

对于您的情况,只需创建一个 deque 对象而不是 Queue 对象。

from collections import deque
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.queue = deque()  



def remove_triangle(self):
    if not self.queue.is_empty(): 
         self.canvas.delete(self.queue.pop())