如何使用tkin中的mousex和mousey坐标移动屏幕上的对象

2024-09-27 09:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图移动绿色物体char相对于鼠标x和鼠标y的坐标,但我不知道如何移动。有人能帮我吗?如果你想知道我正在尝试制作一个版本的单人阿加里奥。在

from tkinter import *
import random
from random import uniform, randrange
import time
#left,top,right,bottom

tk = Tk()
canvas = Canvas(tk,width=600,height=600)
canvas.pack()

pointcount = 0

char = canvas.create_oval(400,400,440,440,fill="green")
pos1 = canvas.coords(char)
x = canvas.canvasx()
y = canvas.canvasy()
class Ball:#ball characteristics#
    def __init__(self,color,size):
        self.shape = canvas.create_oval(10,10,50,50,fill=color)
        self.xspeed = randrange(-5,7)
        self.yspeed = randrange(-5,7) 
    def move(self):#ball animation#
        global pointcount
        canvas.move(self.shape,self.xspeed,self.yspeed)
        pos = canvas.coords(self.shape)
        if pos[0] <= 0 or pos[2] >= 600:#if ball hits the wall#
            self.xspeed = -self.xspeed
        if pos[1] <= 0 or pos[3] >= 600:
            self.yspeed = -self.yspeed
        left_var = abs(pos[0] - pos1[0])
        top_var = abs(pos[1] - pos1[1])
        if left_var == 0 and top_var == 0:
            pointcount = pointcount + 1
            print(pointcount)


colors = ["red","blue","green","yellow","purple","orange"]
balls = []

for i in range(10):
    balls.append(Ball(random.choice(colors),50))

while True:
    for ball in balls:
        ball.move()
    tk.update()
    time.sleep(0.01)

Tags: posimportselfifvartoprandomleft
1条回答
网友
1楼 · 发布于 2024-09-27 09:33:32

要用鼠标移动绿色圆圈,需要将圆的位置绑定到鼠标运动事件。下面是一个示例,当鼠标位于画布中时,圆始终以鼠标为中心:

from tkinter import *

root = Tk()

canvas = Canvas(root)
canvas.pack(fill="both", expand=True)

char = canvas.create_oval(400,400,440,440,fill="green")

def follow_mouse(event):
    """ the center of char follows the mouse """
    x, y = event.x, event.y
    canvas.coords(char, x - 20, y - 20, x + 20, y + 20)

# bind follow_mouse function to mouse motion events
canvas.bind('<Motion>', follow_mouse)

root.mainloop()

相关问题 更多 >

    热门问题