Объект, следующий за X координатами положения мыши Tkinter - PullRequest
0 голосов
/ 22 мая 2018

Я пытаюсь сделать понг, я хочу, чтобы мой манипулятор следовал за положением х мыши.Я просто присвоил переменной x положение мыши, и она добавлялась к себе каждый раз, когда я перемещал мышь, а затем просто уходил с экрана.Теперь я немного его изменил, но просто не могу заставить его работать

ОШИБКИ:

    Traceback (most recent call last):
    File "Tkinter.py", line 1536, in __call__
    return self.func(*args)
    File "animationTest.py", line 51, in motion
    self.diff = self.x - canvas.coords(self.paddle)
    TypeError: unsupported operand type(s) for -: 'int' and 'list'

КОД:

from Tkinter import *
import time

HEIGHT = 500
WIDTH = 800
COLOR = 'blue'
SIZE = 50

root = Tk()

canvas = Canvas(root, width=WIDTH, height=HEIGHT, bg=COLOR)
canvas.pack()


class Ball:

   def __init__(self, canvas):
      self.ball = canvas.create_oval(0, 0, SIZE, SIZE, fill='black')
      self.speedx = 6
      self.speedy = 6
      self.active = True
      self.move_active()

   def ball_update(self):
      canvas.move(self.ball, self.speedx, self.speedy)
      pos = canvas.coords(self.ball)
      if pos[2] >= WIDTH or pos[0] <= 0:
            self.speedx *= -1
      if pos[3] >= HEIGHT or pos[1] <= 0:
            self.speedy *= -1

   def move_active(self):
      if self.active:
         self.ball_update()
         root.after(1, self.move_active)



class Paddle:


   def __init__(self, canvas):
      self.paddle = canvas.create_rectangle(0,0,100,10, fill='red')
      canvas.bind('<Motion>', self.motion)
      self.active = True
      self.move_active


   def motion(self, event):
      self.x = event.x
      self.diff = self.x - canvas.coords(self.paddle)
      print('the diff is:' ,self.diff)
      print('the click is at: {}'.format(self.x))


   def move_active(self):
      if self.active:
         self.motion()
         root.after(1, self.move_active)





run = Ball(canvas)
run2 = Paddle(canvas)
root.mainloop()

1 Ответ

0 голосов
/ 22 мая 2018

Нет смысла читать текущие координаты.Вы можете использовать event.x для вычисления новых координат, не зная, какие текущие координаты.

def motion(self, event):
    '''update paddle coordinates using current mouse position'''
    canvas.coords(self.paddle, event.x-50, 0, event.x+50, 10)

Это просто переопределяет координаты 0,0,100,10, которые вы установили в методе __init__, на новые координаты, основанные на положении мыши.

...