classMoveWidget(Animation):"""Animation of moving `Widget`"""def__init__(self,widget:"virtual.Widget",ms:int,offset:tuple[float,float],*,controller:typing.Callable[[float],float]=controllers.flat,end:typing.Callable[[],typing.Any]|None=None,repeat:int=0,fps:int=30,)->None:""" * `widget`: widget to be moved * `ms`: duration of the animation, in milliseconds * `offset`: relative offset of the coordinates * `controller`: control functions that determine the course of the entire animation movement * `end`: ending function, which is called once at the end of the animation * `repeat`: number of repetitions of the entire animation process * `fps`: the FPS of the animation """dx,dy=offsetAnimation.__init__(self,ms,controller,callback=lambdap:widget.move(dx*p,dy*p),end=end,repeat=repeat,fps=fps,derivation=True,)
importmathimporttkintertoolsastktimporttkintertools.animationasanimationclassMyAnimation(animation.Animation):"""My customized animation class"""def__init__(self,ms:int,window:tkt.Tk,*args,**kwargs)->None:"""Let the window gradually change from transparent to clear"""controller=animation.controller_generator(math.sin,0,math.pi,map_y=False)super().__init__(ms,controller,callback=window.alpha,*args,**kwargs)root=tkt.Tk()MyAnimation(2000,root,repeat=-1,fps=60).start(delay=1000)root.mainloop()