Python 2.7 Python-我不理解这种情况

Python 2.7 Python-我不理解这种情况,python-2.7,tkinter,Python 2.7,Tkinter,我读过关于id()这类工作的文档 myvar='asd' print id(myvar) 但在这段代码中,我无法理解它是如何工作的 from Tkinter import * import time import random class pelota: def __init__(self,canvas,raqueta,color): self.canvas=canvas self.raqueta=raqueta self.id=can

我读过关于
id()
这类工作的文档

myvar='asd'
print id(myvar)
但在这段代码中,我无法理解它是如何工作的

from Tkinter import *
import time
import random

class pelota:
    def __init__(self,canvas,raqueta,color):
        self.canvas=canvas
        self.raqueta=raqueta
        self.id=canvas.create_oval(10,10,25,25, fill=color)
        self.canvas.move(self.id,250,125)
        empezar=[-5,-4,-3,-2,-1,1,2,3,4,5]
        random.shuffle(empezar)
        self.x=empezar[0]
        self.y=-3
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()

    def golpea_raqueta(self, pos):
        raqueta_pos = self.canvas.coords(self.raqueta.id)
        if pos[2] >= raqueta_pos[0] and  pos[0] <= raqueta_pos[2]:
            if pos[3] >=raqueta_pos[1] and pos[3] <= raqueta_pos[3]:
id如何处理(self.raqueta.id)

完整代码

from Tkinter import *
import time
import random

class pelota:
    def __init__(self,canvas,raqueta,color):
        self.canvas=canvas
        self.raqueta=raqueta
        self.id=canvas.create_oval(10,10,25,25, fill=color)
        self.canvas.move(self.id,250,125)
        empezar=[-5,-4,-3,-2,-1,1,2,3,4,5]
        random.shuffle(empezar)
        self.x=empezar[0]
        self.y=-3
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()

    def golpea_raqueta(self, pos):
        raqueta_pos = self.canvas.coords(self.raqueta.id)
        if pos[2] >= raqueta_pos[0] and  pos[0] <= raqueta_pos[2]:
            if pos[3] >=raqueta_pos[1] and pos[3] <= raqueta_pos[3]:
                return True
        return False

    def dibujar(self):
        self.canvas.move(self.id,self.x,self.y)
        pos = self.canvas.coords(self.id)
        if pos[1]<=0:
            self.y=3
        if pos[0]<=0:
            self.x=3
        if pos[2]>= self.canvas_width :
            self.x=-3
        if self.golpea_raqueta(pos) == True:
            self.y=-3
        if pos[3] >= self.canvas_height :
            self.y=-3

class raqueta:
    def __init__(self,canvas,color):
        self.canvas=canvas
        self.id=self.canvas.create_rectangle(10,10,100,20, fill=color)
        self.canvas.move(self.id , 200,300)
        self.x = 0
        self.canvas_width = self.canvas.winfo_width()
        self.canvas.bind_all('<KeyPress-Left>', self.izqu)
        self.canvas.bind_all('<KeyPress-Right>', self.dere)

    def dibujar(self):
        self.canvas.move(self.id,self.x,0)
        pos = self.canvas.coords(self.id)
        if pos[0]<=0:
            self.x=0
        if pos[0]>0:
            self.x=0
        elif pos[2]>=self.canvas_width:
            self.x=0
    def izqu(self,evt):
        self.x=-20


    def dere(self,evt):
        self.x=20

vent= Tk()
vent.title('mipong')
vent.resizable(0,0)
vent.wm_attributes('-topmost',1)
canvas= Canvas(vent, width=500,height=500, bd=0,highlightthicknes=0)
canvas.pack()
vent.update()

raqueta= raqueta(canvas,'blue')    
pelota=pelota(canvas,raqueta,'red')


#help(Tkinter.Canvas.winfo_height)
while 1:
    pelota.dibujar()
    raqueta.dibujar()
    vent.update_idletasks()
    vent.update()
    time.sleep(0.01)
从Tkinter导入*
导入时间
随机输入
佩洛塔级:
定义初始(自我、画布、拉克塔、颜色):
self.canvas=canvas
self.raqueta=raqueta
self.id=canvas.create_oval(10,10,25,25,fill=color)
self.canvas.move(self.id,250125)
empezar=[-5,-4,-3,-2,-1,1,2,3,4,5]
随机。洗牌(empezar)
self.x=empezar[0]
self.y=-3
self.canvas_height=self.canvas.winfo_height()
self.canvas_width=self.canvas.winfo_width()
def golpea_raqueta(自我,职位):
raqueta_pos=self.canvas.coords(self.raqueta.id)
如果位置[2]>=raqueta_位置[0]和位置[0]=raqueta_位置[1]和位置[3]=self.canvas_宽度:
self.x=0
def izqu(自身、evt):
self.x=-20
def dere(自我,evt):
self.x=20
通风=Tk()
通风口名称(‘米蓬’)
通风口。可调整大小(0,0)
vent.wm_属性('-top',1)
画布=画布(通风口,宽度=500,高度=500,bd=0,highlightthicknes=0)
canvas.pack()
vent.update()
raqueta=raqueta(画布,“蓝色”)
佩洛塔=佩洛塔(帆布,拉克塔,“红色”)
#帮助(Tkinter.Canvas.winfo_height)
而1:
pelota.dibujar()
raqueta.dibujar()
vent.update_idletasks()
vent.update()
睡眠时间(0.01)

在画布上创建项目时,它会返回一个唯一标识符。在您发布的代码中,您将标识符分配给
self.id
。虽然名称类似于名为
id
的内置函数,但它们完全不相关


为了避免混淆,您可以将
self.id
重命名为
self.canvas\u id

我也这么认为,但是。。。当我用_id更改名称时,代码不起作用,但我最终修复了它,但我不理解这一行。另一个功能选项是将(self.raqueta.id)更改为(real id number)或创建var并保存在那里var=id(object)谢谢。你能不能试着用完整的代码向我解释一下,因为我听不懂。@Shiki:我不知道怎样才能说得更清楚。当你创建一个椭圆形时,你会得到一个标识符。稍后可以使用该标识符修改该椭圆(或任何其他画布对象)。它与
id
函数无关。是的,我知道,,,我的问题是。。。让我们来举一个例子,我创建self.a=canvas.create\u x>>>>>>>用它我得到了id,好了,现在我需要调用它,因为我需要使用它>>>a\u pos=self.canvas.coords(self.a)
from Tkinter import *
import time
import random

class pelota:
    def __init__(self,canvas,raqueta,color):
        self.canvas=canvas
        self.raqueta=raqueta
        self.id=canvas.create_oval(10,10,25,25, fill=color)
        self.canvas.move(self.id,250,125)
        empezar=[-5,-4,-3,-2,-1,1,2,3,4,5]
        random.shuffle(empezar)
        self.x=empezar[0]
        self.y=-3
        self.canvas_height = self.canvas.winfo_height()
        self.canvas_width = self.canvas.winfo_width()

    def golpea_raqueta(self, pos):
        raqueta_pos = self.canvas.coords(self.raqueta.id)
        if pos[2] >= raqueta_pos[0] and  pos[0] <= raqueta_pos[2]:
            if pos[3] >=raqueta_pos[1] and pos[3] <= raqueta_pos[3]:
                return True
        return False

    def dibujar(self):
        self.canvas.move(self.id,self.x,self.y)
        pos = self.canvas.coords(self.id)
        if pos[1]<=0:
            self.y=3
        if pos[0]<=0:
            self.x=3
        if pos[2]>= self.canvas_width :
            self.x=-3
        if self.golpea_raqueta(pos) == True:
            self.y=-3
        if pos[3] >= self.canvas_height :
            self.y=-3

class raqueta:
    def __init__(self,canvas,color):
        self.canvas=canvas
        self.id=self.canvas.create_rectangle(10,10,100,20, fill=color)
        self.canvas.move(self.id , 200,300)
        self.x = 0
        self.canvas_width = self.canvas.winfo_width()
        self.canvas.bind_all('<KeyPress-Left>', self.izqu)
        self.canvas.bind_all('<KeyPress-Right>', self.dere)

    def dibujar(self):
        self.canvas.move(self.id,self.x,0)
        pos = self.canvas.coords(self.id)
        if pos[0]<=0:
            self.x=0
        if pos[0]>0:
            self.x=0
        elif pos[2]>=self.canvas_width:
            self.x=0
    def izqu(self,evt):
        self.x=-20


    def dere(self,evt):
        self.x=20

vent= Tk()
vent.title('mipong')
vent.resizable(0,0)
vent.wm_attributes('-topmost',1)
canvas= Canvas(vent, width=500,height=500, bd=0,highlightthicknes=0)
canvas.pack()
vent.update()

raqueta= raqueta(canvas,'blue')    
pelota=pelota(canvas,raqueta,'red')


#help(Tkinter.Canvas.winfo_height)
while 1:
    pelota.dibujar()
    raqueta.dibujar()
    vent.update_idletasks()
    vent.update()
    time.sleep(0.01)