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下使用Txt2Html实现网页过滤代理的教程
Apr 11 Python
使用Python下的XSLT API进行web开发的简单教程
Apr 15 Python
简单了解Django模板的使用
Dec 20 Python
python logging日志模块以及多进程日志详解
Apr 18 Python
python之从文件读取数据到list的实例讲解
Apr 19 Python
Python3.6通过自带的urllib通过get或post方法请求url的实例
May 10 Python
Python 安装第三方库 pip install 安装慢安装不上的解决办法
Jun 18 Python
Python模拟登录之滑块验证码的破解(实例代码)
Nov 18 Python
python中常见错误及解决方法
Jun 21 Python
python3实现将json对象存入Redis以及数据的导入导出
Jul 16 Python
python wsgiref源码解析
Feb 06 Python
使用scrapy实现增量式爬取方式
Jun 21 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
浅析Yii2 gridview实现批量删除教程
2016/04/22 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP实现QQ、微信和支付宝三合一收款码实例代码
2018/02/19 PHP
Javascript之文件操作
2007/03/07 Javascript
ExtJS 简介 让你知道extjs是什么
2008/12/29 Javascript
Prototype Number对象 学习
2009/07/19 Javascript
仿微博字符限制效果实现代码
2012/04/20 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
JavaScript实现信用卡校验方法
2015/04/07 Javascript
JavaScript实现函数返回多个值的方法
2015/06/09 Javascript
jQuery中常用动画效果函数(日常整理)
2016/09/17 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
codeMirror插件使用讲解
2017/01/16 Javascript
AngularJS中controller控制器继承的使用方法
2017/11/03 Javascript
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
2018/04/19 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
node.js中对Event Loop事件循环的理解与应用实例分析
2020/02/14 Javascript
[00:30]明星选手化身超级英雄!2018DOTA2亚洲邀请赛全明星赛来临!
2018/04/06 DOTA
[01:04]不如跳舞!DOTA2新英雄玛尔斯的欢乐日常
2019/03/11 DOTA
Python基本数据类型详细介绍
2014/03/11 Python
Python中常用操作字符串的函数与方法总结
2016/02/04 Python
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
python创建列表和向列表添加元素的实现方法
2017/12/25 Python
Python实现的视频播放器功能完整示例
2018/02/01 Python
使用Rasterio读取栅格数据的实例讲解
2019/11/26 Python
使用Python串口实时显示数据并绘图的例子
2019/12/26 Python
Python实现结构体代码实例
2020/02/10 Python
CSS3实现彩色进度条动画的示例
2020/10/29 HTML / CSS
大学生怎样进行自我评价
2013/12/07 职场文书
总经理文秘岗位职责
2014/02/03 职场文书
会计自荐信范文
2014/03/09 职场文书
民政局标准版离婚协议书
2014/12/01 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
详解Vue slot插槽
2021/11/20 Vue.js
springboot为异步任务规划自定义线程池的实现
2022/06/14 Java/Android