tkinter模块,掌握窗口创建、消息循环等tkinter的基本架构
读取并显示图片,处理键盘事件
- 导入random库,导入python中的tkinter库弹窗messagebox
import random import tkinter,tkinter.messagebox
- 读取图片文件生成对象的列表
def loadImages():
global images
for i in range(16):
img=tkinter.PhotoImage(file='.\image\'+str(i+1)+'.gif')
images.append(img)
print(images)
- 打乱拼图顺序
def initPuzzle():
global id,row,col
id=[i for i in range(16)]
row=3
col=3
for i in range(10):
n=random.randint(1,4)
if n==1:
moveUp()
elif n==2:
moveDown()
elif n==3:
moveLeft()
elif n==4:
moveRight()
- 绘制图片拼图
def drawPuzzle(canvas):
for i in range(4):
for j in range(4):
n=id[4*i+j]
canvas.create_image(100*j+3,100*i+3,anchor='nw',image=images[n])
5.按下光标键时对应的时间处理函数
def onMoveUp(event):
moveUp()
drawPuzzle(canvas)
judge()
def onMoveDown(event):
moveDown()
drawPuzzle(canvas)
judge()
def onMoveLeft(event):
moveLeft()
drawPuzzle(canvas)
judge()
def onMoveRight(event):
moveRight()
drawPuzzle(canvas)
judge()
- 黑色拼图移动
def moveUp():
global id,row,col
if row>0:
id[4*row+col]=id[4*(row-1)+col]
id[4*(row-1)+col]=15
row-=1
def moveDown():
global id,row,col
if row<3:
id[4*row+col]=id[4*(row+1)+col]
id[4*(row+1)+col]=15
row+=1
def moveLeft():
global id,row,col
if col>0:
id[4*row+col]=id[4*row+col-1]
id[4*row+col-1]=15
col-=1
def moveRight():
global id,row,col
if col<3:
id[4*row+col]=id[4*row+col+1]
id[4*row+col+1]=15
col+=1
- 判断是否完成拼图
def judge():
global id
for i in range(16):
if id[i]!=i:
break
else:
tkinter.messagebox.showinfo('拼图','拼图成功!')
initPuzzle()
drawPuzzle(canvas)
- 调用程序
id=[]
images=[]
row=0
col=0
win=tkinter.Tk()
win.wm_title("拼图")
win.resizable(False,False)
win.bind("",onMoveUp)
win.bind("",onMoveDown)
win.bind("", onMoveLeft)
win.bind("",onMoveRight) 数
canvas=tkinter.Canvas(win,width=401,height=401,bg='black')
canvas.pack()
loadImages()
initPuzzle()
drawPuzzle(canvas)
win.mainloop()
完整代码
import random
import tkinter,tkinter.messagebox
def loadImages():
global images
for i in range(16):
img=tkinter.PhotoImage(file='.\image\'+str(i+1)+'.gif')
images.append(img)
print(images)
def initPuzzle():
global id,row,col
id=[i for i in range(16)]
row=3
col=3
for i in range(10):
n=random.randint(1,4)
if n==1:
moveUp()
elif n==2:
moveDown()
elif n==3:
moveLeft()
elif n==4:
moveRight()
def drawPuzzle(canvas):
for i in range(4):
for j in range(4):
n=id[4*i+j]
canvas.create_image(100*j+3,100*i+3,anchor='nw',image=images[n])
def onMoveUp(event):
moveUp()
drawPuzzle(canvas)
judge()
def onMoveDown(event):
moveDown()
drawPuzzle(canvas)
judge()
def onMoveLeft(event):
moveLeft()
drawPuzzle(canvas)
judge()
def onMoveRight(event):
moveRight()
drawPuzzle(canvas)
judge()
def moveUp():
global id,row,col
if row>0:
id[4*row+col]=id[4*(row-1)+col]
id[4*(row-1)+col]=15
row-=1
def moveDown():
global id,row,col
if row<3:
id[4*row+col]=id[4*(row+1)+col]
id[4*(row+1)+col]=15
row+=1
def moveLeft():
global id,row,col
if col>0:
id[4*row+col]=id[4*row+col-1]
id[4*row+col-1]=15
col-=1
def moveRight():
global id,row,col
if col<3:
id[4*row+col]=id[4*row+col+1]
id[4*row+col+1]=15
col+=1
def judge():
global id
for i in range(16):
if id[i]!=i:
break
else:
tkinter.messagebox.showinfo('拼图','拼图成功!')
initPuzzle()
drawPuzzle(canvas)
id=[]
images=[]
row=0
col=0
win=tkinter.Tk()
win.wm_title("拼图")
win.resizable(False,False)
win.bind("",onMoveUp)
win.bind("",onMoveDown)
win.bind("", onMoveLeft)
win.bind("",onMoveRight) 数
canvas=tkinter.Canvas(win,width=401,height=401,bg='black')
canvas.pack()
loadImages()
initPuzzle()
drawPuzzle(canvas)
win.mainloop()
参考运行结果
有任何问题、意见建议,欢迎留言!



