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中的reduce内建函数使用方法指南
Aug 31 Python
Python装饰器使用示例及实际应用例子
Mar 06 Python
requests和lxml实现爬虫的方法
Jun 11 Python
python3.4下django集成使用xadmin后台的方法
Aug 15 Python
python实现随机调用一个浏览器打开网页
Apr 21 Python
python实现自动发送邮件
Jun 20 Python
Python实现的简单线性回归算法实例分析
Dec 26 Python
浅谈Python中的可迭代对象、迭代器、For循环工作机制、生成器
Mar 11 Python
Python 网络编程之TCP客户端/服务端功能示例【基于socket套接字】
Oct 12 Python
Python3操作读写CSV文件使用包过程解析
Apr 10 Python
使用Pycharm在运行过程中,查看每个变量的操作(show variables)
Jun 08 Python
总结Pyinstaller打包的高级用法
Jun 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
php跨域cookie共享使用方法
2014/02/20 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
Firefox 无法获取cssRules 的解决办法
2006/10/11 Javascript
心扬JS分页函数代码
2010/09/10 Javascript
javascript中关于break,continue的特殊用法与介绍
2012/05/24 Javascript
将字符串转换成gb2312或者utf-8编码的参数(js版)
2013/04/10 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
JS自定义对象实现Java中Map对象功能的方法
2015/01/20 Javascript
基于jQuery实现仿搜狐辩论投票动画代码(附源码下载)
2016/02/18 Javascript
AngularJS实现textarea记录只能输入规定数量的字符并显示
2016/04/26 Javascript
jQuery插件EasyUI获取当前Tab中iframe窗体对象的方法
2016/08/05 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
angular.js指令中的controller、compile与link函数的不同之处
2017/05/10 Javascript
Angular.js自动化测试之protractor详解
2017/07/07 Javascript
JS分页的实现(同步与异步)
2017/09/16 Javascript
浅谈js的解析顺序 作用域 严格模式
2017/10/23 Javascript
浅谈如何使用webpack构建多页面应用
2018/05/30 Javascript
Angular设置别名alias的方法
2018/11/08 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
小程序如何构建骨架屏
2019/05/29 Javascript
分享一个常用的Python模拟登陆类
2015/03/29 Python
Python中模块与包有相同名字的处理方法
2017/05/05 Python
python版本的仿windows计划任务工具
2018/04/30 Python
详谈Pandas中iloc和loc以及ix的区别
2018/06/08 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
详解python中递归函数
2019/04/16 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python日志logging模块功能与用法详解
2020/04/09 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
internal修饰符起什么作用
2013/12/16 面试题
年终总结会议主持词
2014/03/17 职场文书
《老山界》教学反思
2014/04/08 职场文书
工作分析计划书
2014/04/30 职场文书
学习方法演讲稿
2014/05/10 职场文书
妈妈活动方案
2014/08/15 职场文书