Python百日百行代码挑战-day7,游戏模块学习,tkinter

昨天摆烂了一天,今天继续,之前写贪吃蛇的时候发现自己对一些游戏内置模块还是不够熟练,所以觉得在补补基础部分,今天学习的是tkinter模块。

模块介绍

tkinter是图形交互模块,就是显示界面,键鼠互动等等用的,介绍完了。

模块用法

参考

知乎上的一篇质量不错的文章
取色器

用tkinter创建一个可以点的按钮

代码如下

from tkinter import *   # 导入包

tk = Tk()  # 初始化

def hello():  # 定义一个鼠标事件
    print("what a nice day today!")

btn = Button(tk,command = hello,text = 'here')  # 定义按钮本身
btn.pack()  # 没有这个就不会显示界面,作用是把数据装进二进制字符串

tk.mainloop()  # 没有这个也不会显示界面,会让界面进入某种循环

根据知乎的文章,我个人的理解是,pack就是把你设定的某个按钮或者事件,让python能够知道你想干啥,如果没有这个,python无法直接理解你输入的内容,比如我这里写的here啥的,得让python知道这玩意。mainloop的作用是刷新界面,按完按钮是要触发事件的,完了mianloop刷新一下才能知道触发之后是啥样子,比如你搁着读文章,完了你点这个知乎的链接,然后界面就得刷新,跳转到那个什么“你即将访问csdn以外的网站",bulabula什么的那个东西(可能解释的不是很好,不过大概就是这么理解的),程序跟网页应该是差不多一个道理吧,就这么个意思,如果没这个语句,第一次刷新就不会存在,自然也就不会显示任何东西了。

显示结果试一下:
在这里插入图片描述
然后点一下,就在python下面的控制台出现结果了。
在这里插入图片描述

创建画布

canvas = Canvas(tk,width=600,height=500)
canvas.pack()
tk.mainloop()

tk是之前实例化过的类,后面的两个参数是宽和高
然后结果是这样式的:
在这里插入图片描述
嗯,一个画布

画线

canvas = Canvas(tk,width=600,height=500)
canvas.pack()

canvas.create_line(100,200,300,400)

tk.mainloop()

create_line就是画线函数,后面4个参数的意义是,起点和终点的坐标,刚好4个。
结果:
在这里插入图片描述

画矩形

canvas = Canvas(tk,width=300,height=300)
canvas.create_rectangle(140,150,160,170)
canvas.pack()

tk,mainloop()

用create_tectangle函数,四个参数的意义是左上角的坐标和右下角的坐标
结果:
在这里插入图片描述

随机函数

canvas = Canvas(tk,width=600,height=600)
canvas.pack()

def matrixdrawing(ending1,ending2):
    a = random.randrange(ending1)
    b = random.randrange(ending2)
    a1 = a+random.randrange(ending1)
    b1 = b+random.randrange(ending2)
    canvas.create_rectangle(a,b,a1,b1)


for i in range(0,4):
    matrixdrawing(300,300)

tk.mainloop()

自己写了一个随机生成矩阵的函数,循环了4次。random.randrange(start,stop,step)。其中start和step是可选参数,一个是起始数值,默认为0,一个是步长,默认为1。stop就是取到的随机数的最大值,必选参数。
结果:
在这里插入图片描述

设置颜色

canvas = Canvas(tk,width=600,height=600)
canvas.pack()

def matrixdrawing(ending1,ending2,colorr):
    a = random.randrange(ending1)
    b = random.randrange(ending2)
    a1 = a+random.randrange(ending1)
    b1 = b+random.randrange(ending2)
    canvas.create_rectangle(a,b,a1,b1,fill = colorr)


matrixdrawing(300,300,'#A9C43C')
matrixdrawing(300,300,'#3CC4A9')
matrixdrawing(300,300,'#4D4DB3')
matrixdrawing(300,300,'#7E8877')

tk.mainloop()

原理就是在create_rectangle函数最后面加一个fill参数,然后就可以写red,blue等等这样的颜色,如果不知道颜色英文是啥就用编码,具体颜色编码看这里取色器网址,自己随便在网上搜一个取色器网址就行。

画圆弧

canvas = Canvas(tk,width=800,height=800)
canvas.pack()

canvas.create_arc(20,20,350,350,extent=90,style=ARC)
canvas.create_arc(20,400,300,600,extent=180,style=ARC)
canvas.create_arc(400,20,700,300,extent=270,style=ARC)

tk.mainloop()

画圆弧用create_arc函数,参数的意义是,前4个是外接圆的矩形的左上右下坐标,extent表示画的角度,style=ARC就是画圆弧。
结果:
在这里插入图片描述

画多边形

canvas = Canvas(tk,width=600,height=600)
canvas.pack()

canvas.create_polygon(10,10,10,200,95,200,fill='',outline='#7E8877')
canvas.create_polygon(100,150,200,200,300,420,250,400,fill='',outline='#A9C43C')

tk.mainloop()

用create_polygon函数,参数的意义就是顶点的坐标,完了连一起就对了。
结果:
在这里插入图片描述

写字

canvas = Canvas(tk,width=600,height=600)
canvas.pack()

canvas.create_text(300,300,text='欢迎来到德莱联盟',fill='#5050F3',font=('Times',50))

tk.mainloop()

用create_text,后面的参数我觉得应该是字体中心的位置。text是文本内容,fill是颜色,font是样式,times是字体,50是大小。(我还没找到别的字体表示方法是啥)
结果:
在这里插入图片描述

读取图片

canvas = Canvas(tk,width=600,height=600)
canvas.pack()

image1 = PhotoImage(file=写你自己的图片路径)
canvas.create_image(150,150,image=image1)

tk.mainloop()

用create_image函数,坐标是图片的中心点位置(一遍遍测试试出来的),这个函数其实还有一个方向anchor参数,但是我没太搞明白是啥意思。还有一个踩坑示例,PhotoImage打开jpg文件出错了,png可以正常打开。
结果:
在这里插入图片描述

动画效果

canvas = Canvas(tk,width=800,height=800)
canvas.pack()

id1 = canvas.create_polygon(10,10,60,10,35,60)
id2 = canvas.create_polygon(10,50,60,50,35,110)

for i in range(0,80):
    canvas.move(1,8,0)
    canvas.move(2,3,9)
    tk.update()
    time.sleep(0.05)

用canvas.move函数,1就代表id1,感兴趣的同学下去敲一下print(id1)就知道了。8代表横向移动像素,0代表纵向移动像素。因为是动图就不发例子了。

键盘事件

canvas = Canvas(tk,width=800,height=800)
canvas.pack()

id1 = canvas.create_polygon(10,10,60,10,35,60)

def move(event):
    if event.keysym == 'W':
        canvas.move(id1,0,-5)
    elif event.keysym == 'S':
        canvas.move(id1,0,5)
    elif event.keysym == 'A':
        canvas.move(id1,-5,0)
    else:
        canvas.move(id1,5,0)

canvas.bind_all('<KeyPress-W>',move)
canvas.bind_all('<KeyPress-S>',move)
canvas.bind_all('<KeyPress-A>',move)
canvas.bind_all('<KeyPress-D>',move)

tk.mainloop()

如代码,相信你看得懂。有一个很坑的东西,这玩意群分大小写的????我写的这个代码,你得大写人三角形才给你动,不然不动,我刚开始还找了很久的bug,好气啊,我在写一个小写版的。

def move(event):
    if event.keysym == 'w':
        canvas.move(id1,0,-5)
    elif event.keysym == 's':
        canvas.move(id1,0,5)
    elif event.keysym == 'a':
        canvas.move(id1,-5,0)
    else:
        canvas.move(id1,5,0)

canvas.bind_all('<KeyPress-w>',move)
canvas.bind_all('<KeyPress-s>',move)
canvas.bind_all('<KeyPress-a>',move)
canvas.bind_all('<KeyPress-d>',move)

麻了麻了,区分大小写真的是我没想到的。

总结

这几天不定期更新挑战,因为要写作业了。
防火防盗防诈骗

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值