大家好,又见面了,我是全栈君。
目录
可还记得上期我们研究的会奔跑的机器人吗?
没错,就是他,整个画面一闪一闪的,非常不好看。
而且,只能单项奔跑,不能双向奔跑。那这期,我们就一起来更加深入的研究一下吧。
一、运动的火柴人。
1、解决闪屏的问题
import tkinter,time
from tkinter import *
tk = tkinter.Tk()
tk.title("窗口") # 设置窗口名称
tk.geometry("200x220+200+220")
w = tk.winfo_screenwidth() # 获取屏幕宽
h = tk.winfo_screenheight() # 获取屏幕高
cn = Canvas(tk, height=h, width=w, bg="white") # bg="pink"
list,a=[],1
for i in range(1,10):
list.append(PhotoImage(file="robot_" + str(i) + ".PNG"))#图片列表
def update_test(e):
tk.update()
global a#设置全局变量
for i in range(1,10):
if a==9:
a=1
cn.create_image(100,100, image=list[0])
else:
cn.create_image(100,100, image=list[a])
a+=1
break
cn.pack()
tk.bind("<Configure>", update_test)
tk.mainloop()
这样,我们的火柴人就不会闪烁了。
二、跟随移动方向奔跑的火柴人
我们上面已经实现了单方向奔跑的火柴人,接下来我们来研究一下双向奔跑的火柴人。
是不是有点内味了,那我们来看源代码:
import tkinter,time
from tkinter import *
from PIL import ImageTk, Image
tk = tkinter.Tk()
tk.title("窗口") # 设置窗口名称
tk.geometry("200x220+600+620")
# tk.overrideredirect(True)
w = tk.winfo_screenwidth() # 获取屏幕宽
h = tk.winfo_screenheight() # 获取屏幕高
cn = Canvas(tk, height=h, width=w, bg="white") # bg="pink"
list,list1,a,b=[],[],1,1
for i in range(1,8):
image1 = Image.open("../test/123/123_" + str(i) + ".PNG") # 打开图片
image = image1.resize((200, 220)) # 设置图片大小
photo = ImageTk.PhotoImage(image) # 引入图片
list.append(photo)
image1 = Image.open("../test/124/123_" + str(i) + ".PNG") # 打开图片
image = image1.resize((200, 220)) # 设置图片大小
photo = ImageTk.PhotoImage(image) # 引入图片
list1.append(photo)
def image(list):
global a
for i in range(1, 8):
if a == 7:
a = 1
cn.create_image(100, 100, image=list[0])
a += 1
else:
cn.create_image(100, 100, image=list[a])
a += 1
break
def xy(x,y):
return x-10,y-10
def update_test(e):
time.sleep(0.1)
tk.update()
x = tk.winfo_x()
y=tk.winfo_y()
tk.geometry("200x220+%s+%s"%(x,y))
global b
if x<b:image(list)
elif x==b:pass
else:image(list1)
b=x
cn.pack()
tk.bind("<Configure>", update_test)
tk.mainloop()
原理也是一样的哦,主要是增加了另外一个方向奔跑的小人。
三、自动移动的火柴人
在上面已经掌握了移动的要诀,那下面让他自己移动起来。
主要代码段:
tk.geometry("200x220+%s+%s"%(x,y))
向左移动:
tk.geometry("200x220+%s+%s"%(x-10,y))
向右移动:
tk.geometry("200x220+%s+%s"%(x+10,y))
向上移动:
tk.geometry("200x220+%s+%s"%(x,y-10))
向下移动:
tk.geometry("200x220+%s+%s"%(x,y+10))
推荐:
过分了,别人用来做桌面应用开发,这家伙却用来撩妹(4)–运动的火柴人
我裂开了,教给他如何搭建和使用代理服务器,他居然用来做这么不正经的事(爬虫,代理ip)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/111349.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...