python中的Tkinter-对象检测(非冲突)

python中的Tkinter-对象检测(非冲突),python,python-2.7,tkinter,Python,Python 2.7,Tkinter,对编程和尝试让我的移动方块检测随机在两个盒子中的一个盒子上生成的宝藏来说,这是一个全新的尝试 from Tkinter import * import time import random window = Tk() canvas = Canvas(window, width = 1200, height = 800, bg = 'yellow') canvas.pack() canvas.pack(padx = 10, pady = 10) a1 = 120 a2 = 120 a3 = 60

对编程和尝试让我的移动方块检测随机在两个盒子中的一个盒子上生成的宝藏来说,这是一个全新的尝试

from Tkinter import *
import time
import random
window = Tk()
canvas = Canvas(window, width = 1200, height = 800, bg = 'yellow')
canvas.pack()
canvas.pack(padx = 10, pady = 10)

a1 = 120
a2 = 120
a3 = 60
a4 = 60
Lm1 = canvas.create_rectangle(a1, a2, a3, a4, fill = 'green')

b1 = 530
b2 = 530
b3 = 600
b4 = 600
Lm2 = canvas.create_rectangle(b1, b2, b3, b4, fill = 'green')

Tr1 = canvas.create_rectangle(85,85,85+10,85+10, fill = 'blue')
Tr2 = canvas.create_rectangle(560,560,560+10,560+10, fill = 'blue')

list1 = [Tr1, Tr2]

Treasure1 = random.choice(list1)

if Treasure1 == Tr1:
    Tr1 = canvas.create_rectangle(85,85,85+10,85+10, fill = 'blue')
    canvas.delete(Tr2)
if Treasure1 == Tr2:
    Tr2 = canvas.create_rectangle(560,560,560+10,560+10, fill = 'blue')
    canvas.delete(Tr1)

vx = 10.0
vy = 10.0

Ro1 = canvas.create_rectangle(20, 20, 20+10, 20+10)

def right():
    canvas.coords(Ro1,x1+vx,y1,x2+vx,y2)
    canvas.update()
    time.sleep(0.1)

def left():
    canvas.coords(Ro1, x1-vx,y1,x2-vx,y2)
    canvas.update()
    time.sleep(0.1)

def down():
    canvas.coords(Ro1, x1,y1+vy,x2,y2+vy)
    canvas.update()
    time.sleep(0.1)

def up():
    canvas.coords(Ro1, x1,y1-vy,x2,y2-vy)
    canvas.update()
    time.sleep(0.1)

for r in range(1, 12):
    x1,y1,x2,y2 = canvas.coords(Ro1)
    right()
for r in range(1,12):
    x1,y1,x2,y2 = canvas.coords(Ro1)
    down()
for r in range(1,5):
    x1,y1,x2,y2 = canvas.coords(Ro1)
    left()
这是我尝试过的,但它不起作用,我想让它移除宝藏,如果它知道宝藏在那里,然后向右移动,我不知道还能怎么做

if Treasure1 == Tr1:
    canvas.delete(Tr1)
    for r in range(1,50):
        x1,y1,x2,y2 = canvas.coords(Ro1)
        right()


window.mainloop()

没有理由创建两个正方形,然后在几行之后删除一个。只要创建一个你想要的。此外,您还必须以某种方式跟踪坐标,或者在每次移动时获取坐标。下面的代码可以工作,但可能不是您想要的。我从帖子上看不出什么东西应该向右移动。希望这能让你朝着正确的方向开始。另外,看看GooD而不是COORD,并考虑在使用GUI编程之前学习如何使用类。
from Tkinter import *
import random

def right():
    canvas.coords(Ro1, ctr_list[1], ctr_list[2],
                       ctr_list[1]+10, ctr_list[2]+10)
##    canvas.update()
    ctr_list[0] += 1
    ctr_list[1] += 10
    ctr_list[2] += 10
    print ctr_list
    if ctr_list[0] < 12:
        window.after(500, right)
##    time.sleep(0.1)

window = Tk()
canvas = Canvas(window, width = 1200, height = 800, bg = 'yellow')
canvas.pack()
canvas.pack(padx = 10, pady = 10)
Button(window, text="Quit", command=window.quit).pack(side="bottom")

a1 = 120
a2 = 120
a3 = 60
a4 = 60
Lm1 = canvas.create_rectangle(a1, a2, a3, a4, fill = 'green')

b1 = 530
b2 = 530
b3 = 600
b4 = 600
Lm2 = canvas.create_rectangle(b1, b2, b3, b4, fill = 'green')

##Tr1 = canvas.create_rectangle(85,85,85+10,85+10, fill = 'blue')
##Tr2 = canvas.create_rectangle(560,560,560+10,560+10, fill = 'blue')

list1 = ["Tr1", "Tr2"]
Treasure1 = random.choice(list1)

if Treasure1 == "Tr1":
    print "TR1"
    ctr_list = [0, a1-30, a3+30]
else:
    print "Tr2"
    ctr_list = [0, b1+30, b3-30]


Tr = canvas.create_rectangle(ctr_list[1], ctr_list[2],
                       ctr_list[1]+10, ctr_list[2]+10, fill="blue")

Ro1 = canvas.create_rectangle(20, 20, 20+10, 20+10)
right()

window.mainloop()