我试图在我的tkinter程序中从队列的前面出一个随机的形状。我尝试了is_empty()
方法,但我似乎遇到了错误。
>>> AttributeError: 'Queue' object has no attribute 'pop'.
任何帮助都非常感谢!
这是我使用
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]
类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 = Queue()
def remove_triangle(self):
if not self.queue.is_empty():
self.canvas.delete(self.queue.pop())
答案 0 :(得分:4)
您不需要自己编写课程。 Python在其标准库中提供Queue
数据结构。您可以使用deque
中的collections
数据结构。
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())
答案 1 :(得分:0)
我正在查看Queue的Python文档(see here)并且我看不到名为pop的方法。也许这就是你错误的原因。但是,我能看到的是以下方法:
Queue.get([block [,timeout]]) 从队列中删除并返回一个项目。如果可选的args块为true且timeout为None(默认值),则在必要时阻止,直到某个项可用为止。如果timeout是一个正数,它会阻止最多超时秒,如果在该时间内没有可用的项,则会引发Empty异常。否则(块为假),如果一个项立即可用,则返回一个项,否则引发Empty异常(在这种情况下忽略超时)。
2.3版中的新功能:超时参数。
也许它符合你的目的。