赞
踩
这是很早之前写的拼图游戏,基于Py/Tk,今天翻出来,然后重新整理,并且发布出来,供大家参考学习,自己看CSDN里有很多了类似的游戏代码,虽然代码逻辑上大同小异,但每个开发者都有自己独特的开发个性和习惯,这并无优劣,而且都可以从代码中都可以一窥究竟。下午整理代码的时候才发现之前写Code的时候,居然一句注释也没有加,搞得自己又重新梳理了一遍Code逻辑,才将注释全部添加上,不添加注释实在不是个好的习惯。虽然拼图小游戏虽然只有几百行的代码,但是对于了解Tkinter的模块以及熟悉Py编程却是既有好处,废话少说,直接上代码吧
1.类初始化
- import random
- import os
- import Pmw
- import time
- from Tkinter import *
- from PIL import Image,ImageTk
-
- class image_crop():
- #拼图游戏
- def __init__(self):
- self.now_path=os.getcwd()
- self.num_page=0
2.设置--图片设置界面--游戏图片的选择
- def image_set(self):
- #设置界面关于拼图游戏中--游戏图片的选择
- path1=[]
- path_flod=self.now_path+"\image_\\"
- for i in(os.listdir(path_flod)):
- path1.append(path_flod+i)
- main_frame1=self.root.grid_slaves(row=1,column=0)
- main_frame1[0].grid_remove()
- self.imageset_toplevel=Frame(self.root)
- self.imageset_toplevel.grid(row=1,column=0,columnspan=3,rowspan=3,sticky=NSEW)
- frame_titleimage=Frame(self.imageset_toplevel)
- frame_titleimage.pack(side=TOP)
- label_tag=Label(frame_titleimage,text=u"图片名称:",width=10,font=('Verdana bold',10))
- label_tag.grid(row=0,column=0,sticky='ws')
- self.image_name=StringVar()
- label_name=Label(frame_titleimage,textvariable=self.image_name,width=20,font=('Verdana bold',10))
- label_name.grid(row=0,column=1)
- self.image_name.set(' ')
- but=Button(frame_titleimage,text=u"确定",width=10,font=('Verdana bold',9),command=sure_comd)
- but.grid(row=0,column=2)
- self.widgets_group=Pmw.ScrolledFrame(self.imageset_toplevel,usehullsize=1,frame_relief="flat",hull_width=500,
- hull_height=400,
- scrollmargin=0)
- self.widgets_group.pack(side=TOP,fill=BOTH,expand=1)
- frame_page=Frame(self.imageset_toplevel)
- frame_page.pack(side=TOP)
- up_page=Button(frame_page,text=u"上一页",width=10,font=('Verdana bold',9),command=test_up)
- up_page.pack(side=LEFT)
- self.ent=StringVar()
- entry_page=Entry(frame_page,width=10,font=('Verdana bold',10),textvariable=self.ent,state='readonly')
- entry_page.pack(side=LEFT)
- self.ent.set(u"第1页")
- down_page=Button(frame_page,text=u"下一页",width=10,font=('Verdana bold',9),command=test_down)
- down_page.pack(side=LEFT)
-
- for i in range(3):
- for j in range(3):
- #生成图片标签Label
-
- img_labelq=Label(self.widgets_group.interior(),borderwidth=2,relief='groove')
- img_labelq.grid(row=i,column=j)
- #加载图片
- image_1(path1[0])
- image_2(path1[1])
- image_3(path1[2])
- image_4(path1[3])
- image_5(path1[4])
- image_6(path1[5])
- image_7(path1[6])
- image_8(path1[7])
- image_9(path1[8])
- #注意:这里需要注意一下,图片文件至少需要大于9张,如果不是,系统报错,因为时间关系这块没有修改

3.设置---图片设置界面--鼠标选中图片后的操作
- def comd_show(event,fr_,path_img):
- #左键-选中图片后--加载图片名称
- fr_.configure(relief='solid')
- self.root.update()
- time.sleep(0.2)
- fr_.configure(relief='groove')
- image_path=os.path.basename(path_img)
- self.image_name.set(image_path.decode("cp936"))
- def doublue_comd(event,path_img):
- #右键-选中图片后--弹窗显示选中图片大图
- imageshow_toplevel=Toplevel()
- imageshow_toplevel.geometry('+400+140')
- imageshow_toplevel.overrideredirect(0)
- image_show=Image.open(path_img)
- if image_show.size[1]>image_show.size[0]:
- self.size_img_2=image_show.resize((350, 450))
- elif image_show.size[1]<image_show.size[0]:
- self.size_img_2=image_show.resize((450, 350))
- self.showimage=ImageTk.PhotoImage(self.size_img_2)
- img_label_show=Label(imageshow_toplevel,borderwidth=2,relief='groove',image=self.showimage)
- img_label_show.grid(row=0,column=0)

4.设置---图片设置界面--所有图片包中图片显示模块
注:这部分代码虽然有些重复,有优化的地方,但逻辑上完备的,这里先将代码贴出来,如果读者有兴趣,可以将此部分优化
- def image_1(path_image):
- #图片选择器---加载第一张图片
- image_set_1=Image.open(path_image)
- if image_set_1.size[1]>image_set_1.size[0]:
- self.size_img_1=image_set_1.resize((128, 170))
- elif image_set_1.size[1]<image_set_1.size[0]:
- self.size_img_1=image_set_1.resize((170, 128))
- self.setimage_label_1=ImageTk.PhotoImage(self.size_img_1)
- qws1=self.widgets_group.interior().grid_slaves(row=0,column=0)
- qws1[0].configure(image=self.setimage_label_1,relief='groove')
- qws1[0].bind("<Button-1>",lambda e,fr_=qws1[0],path_img=path_image: comd_show(e,fr_,path_img))
- qws1[0].bind("<Button-3>",lambda e,path_img=path_image: doublue_comd(e,path_img))
- def image_2(path_image):
- #图片选择器---加载第二张图片
- image_set_2=Image.open(path_image)
- if image_set_2.size[1]>image_set_2.size[0]:
- self.size_img_2=image_set_2.resize((128, 170))
- elif image_set_2.size[1]<image_set_2.size[0]:
- self.size_img_2=image_set_2.resize((170, 128))
- self.setimage_2=ImageTk.PhotoImage(self.size_img_2)
- qws2=self.widgets_group.interior().grid_slaves(row=0,column=1)
- qws2[0].configure(image=self.setimage_2,relief='groove')
- qws2[0].bind("<Button-1>",lambda e,fr_=qws2[0],path_img=path_image: comd_show(e,fr_,path_img))
- qws2[0].bind("<Button-3>",lambda e,path_img=path_image: doublue_comd(e,path_img))
- def image_3(path_image):
- #图片选择器---加载第二张图片
- image_set_3=Image.open(path_image)
- if image_set_3.size[1]>image_set_3.size[0]:
- self.size_img_3=image_set_3.resize((128, 170))
- elif image_set_3.size[1]<image_set_3.size[0]:
- self.size_img_3=image_set_3.resize((170, 128))
- self.setimage_label_3=ImageTk.PhotoImage(self.size_img_3)
- qws3=self.widgets_group.interior().grid_slaves(row=0,column=2)
- qws3[0].configure(image=self.setimage_label_3,relief='groove')
- qws3[0].bind("<Button-1>",lambda e,fr_=qws3[0],path_img=path_image: comd_show(e,fr_,path_img))
- qws3[0].bind(

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。