Я прочитал документацию о id()
этой работы, как этотPython - я не понимаю, это 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]:
Im говорить об этом конкретные линии
self.raqueta=raqueta
raqueta_pos = self.canvas.coords(self.raqueta.id)
Как 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)
Я думаю, что то же самое, но ... когда я изменить имя с _id код не работает, однако я, наконец, исправить это, но я не понимаю, что линия , Другим функциональным вариантом было изменение (self.raqueta.id) на (реальный номер id) или создание var и сохранение там var = id (object). Можете ли попробовать, объясните, что я с полным кодом, потому что я не могу понять. – Shiki
@Shiki: Я не знаю, как я могу сделать это яснее. Когда вы создаете овал, вы возвращаете идентификатор. Вы можете использовать этот идентификатор позже, чтобы изменить этот овал (или любой другой объект canvas). Он не имеет отношения к функции id. –
да я понимаю, что, моя проблема в том, что это – Shiki