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

  • 模块介绍
  • 模块用法
    • 参考
    • 用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)

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

总结

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

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

  1. Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋

    Python百日百行代码挑战-day8,day9,day10,游戏实战系列-五子棋 写在前面 需要用到的工具包和参考 游戏设定 初始化 切换下棋方 判断五子连珠(核心) 鼠标点击流程事件 成品展示 打 ...

  2. 猜猜乐游戏php源码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  3. php消消乐代码,C/C++百行代码实现热门游戏消消乐功能的示例代码

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  4. python写百行代码可运行_56 岁潘石屹学俩月 Python ,写下百行代码

    原标题:56 岁潘石屹学俩月 Python ,写下百行代码 By 超神经 内容导读:跨界王潘石屹在近期迷上了编程,不仅高调宣布学习 Python,拜老师,还隔三差五晒出自己的「编程课作业」,和网友进行 ...

  5. C/C++编程学习:百行代码实现小游戏(剪刀石头布)

    这是一个简单的小游戏(剪刀石头布),让你与电脑对决.你出的拳头由你自己决定,电脑则随机出拳,最后判断胜负. 启动程序后,让你出拳 出拳之后,显示对决结果 代码实现: #include<stdio ...

  6. C/C++百行代码实现热门游戏-消消乐

    游戏设计 首先我们需要使用第三方框架,这里我使用的是sfml,不会使用sfml在我的上几篇文章当中-扫雷(上)有详细的开发环境搭建介绍 首先准备图片资源 一张背景图片,一张宝石图片 窗口初始化加载图片 ...

  7. python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    Kaggle-So Easy!百行代码实现排名Top 5%的图像分类比赛 作者:七月在线彭老师 说明:本文最初由彭老师授权翟惠良发布在公众号"七月在线实验室"上,现再由July重新 ...

  8. 基于Ganos百行代码实现亿级矢量空间数据在线可视化

    简介: 本文介绍如何使用RDS PG或PolarDB(兼容PG版或Oracle版)的Ganos时空引擎提供的数据库快显技术,仅用百行代码实现亿级海量几何空间数据的在线快速显示和流畅地图交互,且无需关注 ...

  9. Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛

    北京 上海巡回站 | NVIDIA DLI深度学习培训 2018年1月26/1月12日 NVIDIA 深度学习学院 带你快速进入火热的DL领域 阅读全文                        ...

  10. js 监听 安卓事件_百行代码实现js事件监听实现跨页面数据传输

    百行代码实现js事件监听实现跨页面数据传输 使用场景 类似消息队列的使用场景,支持同页面和跨页面通信,发送消息和接收消息 技术原理 跨页面通信: 基于事件监听,通过监听 storage事件监听回调机制 ...

最新文章

  1. oracle ORA-00119和ORA-00132解决方法
  2. [转]程序实现调用迅雷(以C#为例)
  3. func_get_args()获取一个函数的所有参数
  4. 【报告分享】中国电信5G行业场景案例集.pdf(附下载链接)
  5. java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
  6. Sharepoint学习笔记---Debug--使用ULS Log跟踪Solution错误信息
  7. linux下文件和目录的颜色表示
  8. html 高德地图坐标,HDHCMS收集高德地图坐标拾取
  9. 关于c#保存图片 图片大小改变的问题
  10. html在手机显示时间,手机北京时间校准
  11. 20+案例教你可视化图表的设计方法
  12. 禁用deepin的搜狗输入法简繁切换快捷键
  13. harmonyos2.0是什么,HarmonyOS 2.0 Beta是什么?HarmonyOS 2.0 简介
  14. C#:实现Euclidean distance欧氏距离算法(附完整源码)
  15. 杰里之. 输出 3 路 PMW【篇】
  16. java过滤_java 过滤list的几种方式
  17. 三分钟快速了解typeScript的装饰器
  18. UG二次开发CreateDialog函数在UI.hxx文件和WinUser.h中的冲突
  19. 如何将资源文件正确嵌入或链接到程序集
  20. 京东优惠券查询API接口接入方案,item_search_coupon - 京东优惠券查询接口

热门文章

  1. 【数据分析实例】 2021年十万条厦门招聘数据分析
  2. 屏蔽高通8953长按电源键的截屏按钮
  3. 关于【正点原子STM32F1开发指南】第五章delay.c文件里fac_us=SystemCoreClock/8000000的保姆级详解
  4. 使用putty进行UART串口调试
  5. 2018年北京信息科技大学第十届程序设计竞赛暨ACM选拔赛 C 颜料的混合 (计算几何)
  6. IllegalStateException: For MAC signing you do not need to specify the verifier key separately异常解决
  7. C语言人五英尺七英寸,5尺7寸(5尺7寸是多高美国)
  8. 电驴虚拟服务器常用端口选择,为何我的电驴端口映射成功还是Lowid?
  9. 葫芦娃手游服务器未响应,葫芦娃混服S453无动于衷开服时间表_葫芦娃新区开服预告_第一手游网手游开服表...
  10. Windows10远程桌面登录——Teamviewer