tkinter华容道4x4教程一
目标:
1.完成tkinter窗口界面的跳转设计
2.设计类函数按钮,“生产”华容道按钮对象
3.游戏界面按钮排列程序设计
主界面
游戏界面
建立一个600x600大小的主界面窗口
import tkinter as t
wind=t.Tk()#主程序
wind.geometry("600x600")
wind.mainloop()
设计主界面的内容,我这边便于演示,设计了一个开始按钮,方便项目有一个好的框架结构,单独设计一个子函数作为项目的初始化,方便后面游戏重启时能再次进入这个函数进行重启,注意,子程序需要放在主程序的上方
import tkinter as t
def zjm():#主界面程序
global number
number={}
zjm_canvas=t.Canvas(wind,width=600,height=600,bg="lightyellow")
zjm_canvas.place(x=0,y=0)
begin_btn=t.Button(zjm_canvas,text="开始挑战",font="kaiti 40 bold",command=fjm)
begin_btn.place(x=180,y=200)
def fjm():#游戏界面
pass
wind=t.Tk()#主程序
wind.geometry("600x600")
zjm()
wind.mainloop()
点击主界面开始按钮,跳转到游戏界面,接下来设计核心的华容道移动方块,利用tkinter的按钮控件设计,使用类函数的方法,此处详细讲解一下关于类函数的用法概念,类似一个生产的工厂,每次利用这个工厂生产出的一个按钮都是一个独立的对象,有自己的参数,坐标,文本内容。我们就可以利用单个对象的坐标对它进行点击的判定。
设计类函数时分析这个“工厂”的生产对象有哪些不一样的地方,这个项目中不一样的地方在每个数字按钮的位置坐标不一样,内容不一样
import tkinter as t
class btn:#类函数创建单独的华容道按钮
def __init__(self,x,y,text,ca):
global number,kong
self.canvas=ca
self.x=x
self.y=y
self.text=text
self.btnname=t.Button(self.canvas,text=self.text,font="kaiti 50 bold",width=3,command=self.check)
self.btnname.place(x=self.x,y=self.y)
def check(self):
pass
def zjm():#主界面程序
global number
number={}
zjm_canvas=t.Canvas(wind,width=600,height=600,bg="lightyellow")
zjm_canvas.place(x=0,y=0)
begin_btn=t.Button(zjm_canvas,text="开始挑战",font="kaiti 40 bold",command=fjm)
begin_btn.place(x=180,y=200)
def fjm():#游戏界面
fjm_canvas = t.Canvas(wind, width=600, height=600, bg="lightyellow")#游戏界面画布
fjm_canvas.place(x=0, y=0)
numlist = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, " ", 15]#华容道按钮文本
wind=t.Tk()#主程序
wind.geometry("600x600")
zjm()
wind.mainloop()
然后再游戏界面的函数中利用循环调用类函数,创建华容道数字按钮
import tkinter as t
import random
from tkinter import messagebox
class btn:#类函数创建单独的华容道按钮
def __init__(self,x,y,text,ca):
global number,kong
self.canvas=ca
self.x=x
self.y=y
self.text=text
self.btnname=t.Button(self.canvas,text=self.text,font="kaiti 50 bold",width=3,command=self.check)
self.btnname.place(x=self.x,y=self.y)
def check(self):#对象点击事件
pass
def zjm():#主界面程序
global number
number={}
zjm_canvas=t.Canvas(wind,width=600,height=600,bg="lightyellow")
zjm_canvas.place(x=0,y=0)
begin_btn=t.Button(zjm_canvas,text="开始挑战",font="kaiti 40 bold",command=fjm)
begin_btn.place(x=180,y=200)
def fjm():#分界面程序与初始化设置
global kongx,kongy,numlist,upset_num,fjm_canvas
fjm_canvas = t.Canvas(wind, width=600, height=600, bg="lightyellow")
fjm_canvas.place(x=0, y=0)
numlist=[1,2,3,4,5,6,7,8,9,10,11,12,13,14," ",15]
#random.shuffle(numlist)
x=50#x坐标初始值
y=50#y坐标初始值
n=0#定义换行的变量
for i in numlist:#遍历列表
if i == " ":#如果等于空,提前记录关于空按钮的坐标信息
kongx=x#空按钮的x坐标
kongy=y#空按钮的y坐标
btn(x,y,str(i),fjm_canvas)#调用类函数
x+=120#每个按钮间隔为120
n+=1
if n == 4:#满足条件说明横向有四个按钮
n=0#计数清零
x=50#换行x坐标归零位
y+=120#y坐标增加
wind=t.Tk()#主程序
wind.geometry("600x600")
zjm()
wind.mainloop()
下一部分进行按钮移动控制的讲解