我写了一个非常简单的代码,可以将一个椭圆形移动到屏幕上:
问题在于当我尝试增加帧率时,椭圆的一半消失了(我尝试拍了几张截图,但在这样做时,应用程序会冻结一个帧,并且在截图中椭圆显示正确,顺便说一句,您可以通过运行上面的代码来尝试自己)。
我的问题是:是否有一种优化动画的方法,或者我必须接受Tkinter无法处理高帧率这一事实?
from tkinter import *
""" GLOBAL VARS """
H, W = 400, 600 # default height / width
DELAY = 30 # frame rate in milliseconds
R = 20 # radius of the ball
class App:
def __init__(self, parent):
""" app init """
self.root = parent
self.canvas = Canvas(self.root, bg="white", height=H, width=W)
self.canvas.pack()
self.pos = [W / 2, H / 2] # starting position
self.speed = [2, 2] # x / y speed
self.canvas.create_oval(self.pos[0] - 20, self.pos[1] - 20, self.pos[0] + 20, self.pos[1] + 20, fill="blue")
self.loop()
def loop(self):
""" main loop """
coords = self.canvas.coords(1)[:2] # actual oval coordinates
if not 0 < coords[0] < W - 20: # the oval bounce off the window
self.speed[0] *= -1
if not 0 < coords[1] < H - 20:
self.speed[1] *= -1
self.canvas.move(1, *self.speed)
self.root.after(DELAY, self.loop)
""" GUI SETUP """
root = Tk()
App(root)
root.mainloop()
问题在于当我尝试增加帧率时,椭圆的一半消失了(我尝试拍了几张截图,但在这样做时,应用程序会冻结一个帧,并且在截图中椭圆显示正确,顺便说一句,您可以通过运行上面的代码来尝试自己)。
我的问题是:是否有一种优化动画的方法,或者我必须接受Tkinter无法处理高帧率这一事实?