0
我已閱讀文檔中關於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]:
林談論這個具體行
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(對象)謝謝。你可以嘗試用完整的代碼解釋我,因爲我無法理解。 – Shiki
@Shiki:我不知道如何讓它更清晰。當你創建一個橢圓形時,你會得到一個標識符。您稍後可以使用該標識符來修改該橢圓形(或任何其他畫布對象)。它沒有與'id'功能相關。 –
是的,我明白了,,我的問題是這 – Shiki