python GUI实现小球满屏乱跑效果


Posted in Python onMay 09, 2019

本文实例为大家分享了python GUI实现小球满屏乱跑效果的具体代码,供大家参考,具体内容如下

学习tkinter有一段时间了,综合运用一下,做一个类似屏保类的东西,碰到屏幕边缘就反弹回来的那种。

初级篇:上下单向移动

from tkinter import *
import random
import time
#
#创建一个类,这个类含有两个参数,一个是画布,一个是球的颜色
#
class Ball:
 def __init__(self,canvas,color):
 self.canvas = canvas
 self.id = canvas.create_oval(10,10,25,25,fill=color)
 self.canvas.move(self.id,245,100)
 #来回反弹
 self.x = 0
 self.y = -1
 #winfo_height()函数来获取画布当前的高度,赋值给对象变量
 self.canvas_height = self.canvas.winfo_height()
 def draw(self):
 self.canvas.move(self.id,self.x,self.y)
 #获取某个对象在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标)
 pos = self.canvas.coords(self.id)
 #打印获取的坐标
 print(pos)
 #如果最上面的纵轴坐标在顶上,则往下移动一个像素
 if pos[1] <= 0:
 self.y = 1
 #如果最下面的纵轴坐标在底上,则向上移动
 if pos[3] > self.canvas_height:
 self.y = -1


#创建画布
tk = Tk()
tk.title("Game_ball")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
#bd=0,highlightthickness=0 画布之外没有边框
canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()

#创建对象 
ball = Ball(canvas,'red')

#一直保持循环
while 1:
 ball.draw()
 #快速刷新屏幕
 tk.update_idletasks()
 tk.update()
 time.sleep(0.01)

这个移动的效果是上下移动的。

python GUI实现小球满屏乱跑效果

python GUI实现小球满屏乱跑效果

进阶篇:随机移动

#########################
#上面的例子小球只能上下移动,这次改变下规则,使之能自由运动,满屏乱动,用random里面的洗牌函数
######################
from tkinter import *
import random
import time
#
#创建一个类,这个类含有两个参数,一个是画布,一个是球的颜色
#
class Ball:
 def __init__(self,canvas,color):
 self.canvas = canvas
 self.id = canvas.create_oval(10,10,25,25,fill=color)
 self.canvas.move(self.id,245,100)
 #来回反弹
 #--self.x = 0
 #--self.y = -1
 starts = [-3,-2,-1,1,2,3]
 random.shuffle(starts)
 self.x = starts[0]
 self.y = -3
 #winfo_height()函数来获取画布当前的高度,赋值给对象变量
 self.canvas_height = self.canvas.winfo_height()
 #获取X轴坐标
 self.canvas_width = self.canvas.winfo_width()
 def draw(self):
 self.canvas.move(self.id,self.x,self.y)
 #获取某个对象在画布的坐标,返回一个数组(两个坐标,左上角的坐标和右下角的两个坐标)
 pos = self.canvas.coords(self.id)
 #打印获取的坐标
 print(pos)
 #如果最上面的纵轴坐标在顶上,则往下移动一个像素
 if pos[1] <= 0:
 self.y = 1
 #如果最下面的纵轴坐标在底上,则向上移动
 if pos[3] > self.canvas_height:
 self.y = -1
 #宽度控制#
 #如果在左边框了,那么向右边移动3像素
 if pos[0] <= 0:
 self.x = 3
 #如果到右边框了,左移动3像素
 if pos[2] > self.canvas_width:
 self.x = -3


#创建画布
tk = Tk()
tk.title("Game_ball")
tk.resizable(0,0)
tk.wm_attributes("-topmost",1)
#bd=0,highlightthickness=0 画布之外没有边框
canvas = Canvas(tk,width=500,height=400,bd=0,highlightthickness=0)
canvas.pack()
tk.update()

#创建对象 
ball = Ball(canvas,'red')

#一直保持循环
while 1:
 ball.draw()
 #快速刷新屏幕
 tk.update_idletasks()
 tk.update()
 time.sleep(0.01)

这个就达到了小球满屏乱跑的效果。

python GUI实现小球满屏乱跑效果

python GUI实现小球满屏乱跑效果

python GUI实现小球满屏乱跑效果

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
py中的目录与文件判别代码
Jul 16 Python
Python获取远程文件大小的函数代码分享
May 13 Python
Python实现堆排序的方法详解
May 03 Python
matplotlib绘图实例演示标记路径
Jan 23 Python
使用Python进行目录的对比方法
Nov 01 Python
从0开始的Python学习014面向对象编程(推荐)
Apr 02 Python
django重新生成数据库中的某张表方法
Aug 28 Python
Python如何用filter函数筛选数据
Mar 05 Python
浅谈keras.callbacks设置模型保存策略
Jun 18 Python
python线程池 ThreadPoolExecutor 的用法示例
Oct 10 Python
python 实现汉诺塔游戏
Nov 28 Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
Apr 28 Python
深入浅析python 协程与go协程的区别
May 09 #Python
Python实现堡垒机模式下远程命令执行操作示例
May 09 #Python
python3.6使用tkinter实现弹跳小球游戏
May 09 #Python
使用GitHub和Python实现持续部署的方法
May 09 #Python
在win10和linux上分别安装Python虚拟环境的方法步骤
May 09 #Python
Python Excel处理库openpyxl使用详解
May 09 #Python
python3实现小球转动抽奖小游戏
Apr 15 #Python
You might like
DC《小丑》11项提名领跑奥斯卡 Netflix成第92届奥斯卡提名最大赢家
2020/04/09 欧美动漫
php 归并排序 数组交集
2011/05/10 PHP
pdo中使用参数化查询sql
2011/08/11 PHP
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP中使用CURL获取页面title例子
2015/01/07 PHP
ThinkPHP中session函数详解
2016/09/14 PHP
PHP实现删除多重数组对象属性并重新赋值的方法
2017/06/07 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
ext实现完整的登录代码
2008/08/08 Javascript
javascript URL锚点取值方法
2009/02/25 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
JavaScript学习点滴 call、apply的区别
2010/10/22 Javascript
jQuery右键菜单contextMenu使用实例
2011/09/28 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
JS实现兼容性较好的随屏滚动效果
2015/11/09 Javascript
JavaScript动态创建form表单并提交的实现方法
2015/12/10 Javascript
AngularJS包括详解及示例代码
2016/08/17 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
Vue 2.0的数据依赖实现原理代码简析
2017/07/10 Javascript
详解VueRouter进阶之导航钩子和路由元信息
2017/09/13 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
关于vue v-for 循环问题(一行显示四个,每一行的最右边那个计算属性)
2018/09/04 Javascript
[01:05:12]2014 DOTA2国际邀请赛中国区预选赛 TongFu VS CIS-GAME
2014/05/21 DOTA
[40:48]DOTA2上海特级锦标赛D组败者赛 Liquid VS COL第二局
2016/02/28 DOTA
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
Python urllib3软件包的使用说明
2020/11/18 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
椰子猫砂:CatSpot
2018/08/27 全球购物
德国购买踏板车网站:Microscooter
2019/10/14 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
光声世纪笔试题目
2012/08/25 面试题
公司2014年度工作总结
2014/12/10 职场文书
作文评语怎么写
2014/12/25 职场文书
高三英语教学反思
2016/03/03 职场文书