Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
删除和删除附加对象-python_Python_Tkinter_Append - Fatal编程技术网

删除和删除附加对象-python

删除和删除附加对象-python,python,tkinter,append,Python,Tkinter,Append,有了下面的代码,我可以在点击的时候从列表中删除附加的精灵,但遗憾的是,这不是我需要的。我花了几个小时的时间试图让它在移动类中循环15次后自动删除并从列表中删除。(如果你需要的话,我可以提供给你 class projectilesGroup(object): def __init__(self, canvas): self.canvas = canvas self.projectiles = list() self.moving = Tru

有了下面的代码,我可以在点击的时候从列表中删除附加的精灵,但遗憾的是,这不是我需要的。我花了几个小时的时间试图让它在移动类中循环15次后自动删除并从列表中删除。(如果你需要的话,我可以提供给你

class projectilesGroup(object):

    def __init__(self, canvas):
        self.canvas = canvas
        self.projectiles = list()
        self.moving = True

    def clicked(self, event, projectile):
        print('clicked:', projectile),

        # remove oval from canvas        
        self.canvas.delete(projectile.oval)

        # remove enemy from list
        self.projectiles.remove(projectile)

    def add_new_projectile(self):
        print(len(self.projectiles))
        if len(self.projectiles) < 5:
            e = projectile(self.canvas)
            # stop new enemy if all enemies are stoped
            e.moving = self.moving
            self.canvas.tag_bind(e.oval, '<Button-1>', lambda event:self.clicked(event, e))
            self.projectiles.append(e)
        else:
            print("You have 5 spells active - I can't add more.")
类ProjectleGroup(对象):
定义初始化(自我,画布):
self.canvas=画布
self.projectles=list()
self.moving=True
已单击def(自身、事件、投射物):
打印('单击:',投射物),
#从画布上移除椭圆
self.canvas.delete(sparket.oval)
#把敌人从名单上除名
自我。射弹。移除(射弹)
def添加新投射物(自身):
打印(透镜(自投射物))
如果len(自射弹)<5:
e=投射物(自我画布)
#如果所有敌人都被阻止,则阻止新敌人
e、 移动的
self.canvas.tag_bind(e.oval',lambda事件:self.clicked(事件,e))
self.projectles.append(e)
其他:
打印(“你激活了5个法术-我不能再添加了。”)
谢谢

def move(self):
    if repcount < 15:
    if self.moving: # to stop root.after
        if self.direction == 1: # up
             self.y1 -= self.radius
             self.y2 -= self.radius
        elif self.direction == 2: # down
            self.y1 += self.radius
            self.y2 += self.radius
        elif self.direction == 3: # left
            self.x1 -= self.radius
            self.x2 -= self.radius
        elif self.direction == 4: # right
            self.x1 += self.radius
            self.x2 += self.radius
        self.canvas.coords(self.oval, self.x1, self.y1, self.x2, self.y2)
        repcount += 1
        root.after(20, self.move)
    else:
        print('done')
def移动(自):
如果重复计数小于15:
如果self.moving:#停止root.after
如果self.direction==1:#向上
self.y1-=自半径
self.y2-=自半径
elif self.direction==2:#向下
self.y1+=自半径
self.y2+=自半径
elif self.direction==3:#左
self.x1-=自半径
self.x2-=自半径
elif self.direction==4:#正确
self.x1+=自半径
self.x2+=自半径
self.canvas.coords(self.oval、self.x1、self.y1、self.x2、self.y2)
重复计数+=1
root.after(20,self.move)
其他:
打印(‘完成’)

首先,每个对象都需要变量来计算移动次数。当
计数器
计数到15时,对象可以自行移除

对象可以轻松地从画布中删除椭圆,因为它具有
self.oval
self.canvas

小问题可能是从
projectlist
中删除对象,但您可以访问
projectlist

e = projectile(self.canvas, self.projectiles)

编辑:可以这样做

class ProjectilesGroup(object):

    # ...

    def clicked(self, event, projectile):
        print('clicked:', projectile),

        self.remove(projectile)

    def remove(self, projectile):

        # remove oval from canvas        
        self.canvas.delete(projectile.oval)

        # remove enemy from list
        self.projectiles.remove(projectile)

    def add_new_projectile(self):
        print(len(self.projectiles))
        if len(self.projectiles) < 5:
            e = Projectile(self, self.canvas) #parent and canvas

        # ...

class Projectile():

    def __init__(self, parent, canvas):
        self.parent = parent
        self.canvas = canvas

        # ... 


    def move(self):

        # .... 

        else:
            print('done')
            self.parent.remove(self)    
类ProjectleGroup(对象):
# ...
已单击def(自身、事件、投射物):
打印('单击:',投射物),
自行移除(投射物)
def移除(自身、投射物):
#从画布上移除椭圆
self.canvas.delete(sparket.oval)
#把敌人从名单上除名
自我。射弹。移除(射弹)
def添加新投射物(自身):
打印(透镜(自投射物))
如果len(自射弹)<5:
e=投射物(自我,自我画布)#父对象和画布
# ...
类():
定义初始化(自、父、画布):
self.parent=parent
self.canvas=画布
# ... 
def移动(自我):
# .... 
其他:
打印(‘完成’)
self.parent.remove(self)


顺便说一句:在文档
PEP8
中,有人建议使用“CamelCase”类名称,如Sprojects和ProjectleGroup。在代码中识别类更容易。一些编辑器甚至对CamelCase名称使用不同的颜色(所以使用蓝色)

是的,我在运动类周围有一个计数器