Ich versuche, einen Ball zu animieren, das wird vorwärts bewegen. Wenn der Benutzer die Taste nach oben oder unten drückt, sollte er sich entsprechend bewegen.Tkinter .after() reagiert nicht auf Tastendruck schnell genug
try:
import tkinter as tk
except ImportError:
import Tkinter as tk
class Movement:
def __init__(self, _frame, _canvas):
self.frame = _frame
self.canvas = _canvas
self.x = 10
self.y = 150
self.count = 0
self.update()
self.frame.bind_all("<Up>", lambda event: self.move_up())
self.frame.bind_all("<Down>", lambda event: self.move_down())
pass
def move_up(self):
self.y -= 10
pass
def move_down(self):
self.y += 10
pass
def update(self):
canvas.delete("obj")
self.count += 10
x2 = self.x + 50
y2 = self.y + 50
self.canvas.create_oval(self.x + self.count, self.y, x2 + self.count, y2, fill="red", tag="obj")
root.after(1000, self.update)
pass
root = tk.Tk()
width = 400
height = 400
canvas = tk.Canvas(root, width=width, height=height)
frame = tk.Frame(root, width=width, height=height)
if __name__ == '__main__':
Movement(frame, canvas)
canvas.grid()
root.mainloop()
Es gibt jedoch ein Problem. Angesichts der Tatsache, dass der Ball sich alle 1 Sekunde bewegt, reagiert er nicht schnell genug auf den Tastendruck. Wenn Sie auf den Aufwärts-Kick klicken, wird der Bildschirm nach einer Sekunde aktualisiert.
Ich weiß, dass es eine Funktion .move() in Tkinter gibt. Aus vielen Gründen kann ich das jedoch nicht verwenden.
Mein Hauptanliegen ist das Intervall, das der Bildschirm benötigt, um aktualisiert zu werden.
So eine kleinere Anzahl an 'after' passieren, dann. – Kevin
Dann wird sich der Ball schneller bewegen, was ich nicht will. –
Wenn Sie ein Spiel machen Tkinter ist schrecklich - Pygame ist viel besser und ist relativ einfach –