Создание плавного движения овала с помощью ткинтера - PullRequest
1 голос
/ 10 июня 2019

Я пытаюсь создать Connect-Four, используя tkinter. Как только диск помещен в определенную колонку, я хочу, чтобы он опускался на дно колонны плавным движением.

Я пытался использовать команду перемещения класса Canvas, но я не уверен, что использую ее неправильно или, возможно, мне лучше удалять и перерисовывать овал каждую итерацию. В настоящее время диск действительно движется, но не плавно. Он просто рисует его в новом месте.

Это функция перемещения диска:

        counter = 0
    self.__canvas.create_oval(100,200,0,100, fill='yellow')
    self.__canvas.create_oval(100,300,0,200, fill='yellow')
    self.__canvas.create_oval(100,400,0,300, fill='brown')
    disc = self.__canvas.create_oval(200,400,100,300, fill='green')  # trying to move this specific disc
    while counter < 10:
         self.__canvas.move(disc, 0, counter)
         counter += 1

Ответы [ 2 ]

2 голосов
/ 10 июня 2019

Вы должны двигаться по вызовам, чтобы двигаться, чтобы движение было видно; canvas.after() позволяет вам повторно вызывать функцию, в этом случае, пока не будет выполнено условие (диск прибыл в пункт назначения)

фрагмент рабочего кода

import tkinter as tk


def smooth_motion(counter):
     canvas.move(disc, 0, dy)
     counter -= 1
     if counter >= 0:
         canvas.after(10, smooth_motion, counter)

root = tk.Tk()
canvas = tk.Canvas(root, bg='cyan')
canvas.pack()

counter = 100
disc = canvas.create_oval(200, 0, 210, 10, fill='green')
dy = (100 - 0) / counter
smooth_motion(counter)

root.mainloop()
0 голосов
/ 10 июня 2019

Вам не хватает функции, которая показывает изменения к холсту - canvas.update(), попробуйте написать ее после canvas.move().

...