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 相关文章推荐
python连接池实现示例程序
Nov 26 Python
SQLite3中文编码 Python的实现
Jan 11 Python
Python使用arrow库优雅地处理时间数据详解
Oct 10 Python
pandas string转dataframe的方法
Apr 11 Python
Python定义二叉树及4种遍历方法实例详解
Jul 05 Python
对python遍历文件夹中的所有jpg文件的实例详解
Dec 08 Python
pyqt 多窗口之间的相互调用方法
Jun 19 Python
python Django中models进行模糊查询的示例
Jul 18 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
python 删除excel表格重复行,数据预处理操作
Jul 06 Python
python FTP编程基础入门
Feb 27 Python
pycharm debug 断点调试心得分享
Apr 16 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
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
yii2.0使用Plupload实现带缩放功能的多图上传
2015/12/22 PHP
深入浅析yii2-gii自定义模板的方法
2016/04/26 PHP
php 自定义错误日志实例详解
2016/11/12 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
JavaScript判断字符长度、数字、Email、电话等常用判断函数分享
2015/04/01 Javascript
jQuery实现为图片添加镜头放大效果的方法
2015/06/25 Javascript
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
jQuery实现滚动鼠标放大缩小图片的方法(附demo源码下载)
2016/03/05 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
vue加载完成后的回调函数方法
2018/09/07 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
使用Python内置的模块与函数进行不同进制的数的转换
2016/03/12 Python
Python编写电话薄实现增删改查功能
2016/05/07 Python
python将文本分每两行一组并保存到文件
2018/03/19 Python
Django 视图层(view)的使用
2018/11/09 Python
python3实现钉钉消息推送的方法示例
2019/03/14 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
解决IDEA 的 plugins 搜不到任何的插件问题
2020/05/04 Python
Python爬虫之Selenium中frame/iframe表单嵌套页面
2020/12/04 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
html5实现完美兼容各大浏览器的播放器
2014/12/26 HTML / CSS
AmazeUI 网格的实现示例
2020/08/13 HTML / CSS
德购商城:德国进口直邮商城
2017/06/13 全球购物
香蕉共和国工厂店:Banana Republic Factory
2018/06/09 全球购物
如何查找和删除数据库中的重复数据
2014/11/05 面试题
专业毕业生个性的自我评价
2013/10/03 职场文书
房地产管理毕业生自荐信
2013/11/04 职场文书
反四风个人对照检查材料
2014/09/26 职场文书
群众路线教育实践活动个人对照检查材料思想汇报(社区班子)
2014/10/06 职场文书
春晚观后感
2015/06/11 职场文书
2016年小学党支部创先争优活动总结
2016/04/05 职场文书
MySQL 全文索引使用指南
2021/05/25 MySQL