python画图和加载图片以及实现动画效果

来源:互联网 发布:返享网络 编辑:程序博客网 时间:2024/06/06 11:36
#__*__coding:utf-8__*__#python3import timefrom tkinter import *def moveImage(event):#图片logo.gif的移动要绑定的函数    if event.keysym=='Up':        canvas.move(1,0,-3)#移动ID为1的事物,使得横坐标加0,纵坐标减3    elif event.keysym=='Down':        canvas.move(1,0,+3)    elif event.keysym=='Left':        canvas.move(1,-3,0)    elif event.keysym=='Right':        canvas.move(1,3,0)    tk.update()    time.sleep(0.05)    def changeColor(event):    if event.keysym=='Up':        canvas.itemconfig(pg,fill='blue')#填充ID为pg的事物,填充为blue    tk=Tk()#窗口canvas=Canvas(tk,width=400,height=400)#画布canvas.pack()#显示出来myImage=PhotoImage(file='C:\\Users\\lai\\Desktop\\logo.gif')#图片格式必须为gif格式im=canvas.create_image(0,0,anchor=NW,image=myImage)#加载图片pg=canvas.create_polygon(10,10,10,60,50,35,fill='red')#创建三角形print (im);print (pg)  #显示图片和三角形的IDcanvas.bind_all('<KeyPress-Up>',moveImage)#绑定方向键 upcanvas.bind_all('<KeyPress-Down>',moveImage)canvas.bind_all('<KeyPress-Left>',moveImage)canvas.bind_all('<KeyPress-Right>',moveImage)#canvas.bind_all('<KeyPress-Up>',changeColor)

运行结果图:

摁上下左右键后可以移动图片



挡板游戏例子

#__*__coding:utf-8__*__#python3from tkinter import *import randomimport timeclass Ball:#小球的类     def __init__(self,canvas,paddle,color):        self.canvas=canvas#传递画布值        self.paddle=paddle#把挡板传递进来        self.id=canvas.create_oval(10,10,25,25,fill=color)#画椭圆并且保存其ID        self.canvas.move(self.id,245,100)        start=[-3,-2,-1,1,2,3]        random.shuffle(start)#随机化列表        self.x=start[0]        self.y=-3        self.canvas_heigh=self.canvas.winfo_height()#获取窗口高度并保存        self.canvas_width=self.canvas.winfo_width()                    def draw(self):        self.canvas.move(self.id,self.x,self.y)        pos=self.canvas.coords(self.id)#返回相应ID代表的图形的当前坐标(左上角和右上角坐标)        #使得小球不会超出窗口        pad=self.canvas.coords(self.paddle.id)#获取挡板的坐标        if pos[1]<=0 :            self.y=3        if pos[3]>=self.canvas_heigh or(pos[3]>=pad[1] and pos[2]>=pad[0] and pos[2]<=pad[2]):            self.y=-3        if pos[0]<=0:            self.x=3        if pos[2]>=self.canvas_width:            self.x=-3            class Paddle:#挡板的类    def __init__(self,canvas,color):        self.canvas=canvas        self.color=color        self.id=canvas.create_rectangle(0,0,100,10,fill=color)        self.canvas.move(self.id,200,300)        self.canvas_width=self.canvas.winfo_width()        self.l=0        self.r=0    def draw(self):        pos=self.canvas.coords(self.id)        if pos[0]<=0:            self.l=0           if pos[2]>=self.canvas_width:            self.r=0                def turn_left(self,event):        self.canvas.move(self.id,self.l,0)        self.l=-20    def turn_right(self,event):        self.canvas.move(self.id,self.r,0)        self.r=20                                 tk=Tk()tk.title('Game')tk.resizable(0,0)#使得窗口大小不可调整tk.wm_attributes('-topmost',1)#包含画布的窗口放在其他窗口的前面canvas=Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)#后面两个参数去掉边框canvas.pack()tk.update()paddle=Paddle(canvas,'blue')ball=Ball(canvas,paddle,'red')canvas.bind_all('<KeyPress-Left>',paddle.turn_left)#绑定方向键canvas.bind_all('<KeyPress-Right>',paddle.turn_right)while 1:    ball.draw()    paddle.draw()    tk.update_idletasks()#快速重画屏幕    tk.update()    time.sleep(0.01)


0 0