python利用tkinter实现屏保


Posted in Python onJuly 30, 2019

本文实例为大家分享了python利用tkinter实现屏保的具体代码,供大家参考,具体内容如下

import random
import tkinter

class RandomBall():
 '''
 运动的球
 '''
 def __init__(self, canvas, scrn_width,scrn_heigh):
  '''
  球的构造函数
  :param canvas: 传入画布,在画布上进行球的构造
  :param scrn_width: 传入屏幕宽度
  :param scrn_heigh: 传入屏幕高度
  '''
  #x,y表示出现的球的圆心
  self.ball_x = random.randint(20, int(scrn_width - 20)) #球出现的随机x坐标
  self.ball_y = random.randint(10, int(scrn_heigh - 10)) #球出现的随机y坐标
  #模拟运动:就是不断地重画球,不断地更新球的位置
  self.x_move = random.randint(4, 30) #模拟x方向运动
  self.y_move = random.randint(5, 20) #模拟y方向运动
  #定义宽度和高度和画布
  self.canvas = canvas
  self.scrn_width = scrn_width
  self.scrn_heigh = scrn_heigh
  #球的大小随机
  self.rad = random.randint(20, 150) #用半径rad表示球的大小
  #定义颜色
  c = lambda : random.randint(0, 255)
  self.color = "#%02x%02x%02x"%(c(), c(), c())

 def creat_ball(self):
  '''
  用构造函数中的值创建一个球
  :return:
  '''
  #tkinter没有画圆函数,只有椭圆函数
  #但在正方形里面画的椭圆就是正圆
  #已知圆心坐标和半径,则圆心坐标减半径能求出正方形左上角
  #圆心坐标加上半径,能求出右下角
  #已知左上角和右上角,可以画出
  x1 = self.ball_x - self.rad #左上角的x坐标
  y1 = self.ball_y - self.rad #左上角的y坐标
  x2 = self.ball_x + self.rad #右下角的x坐标
  y2 = self.ball_y + self.rad #右下角的y坐标
  #在有对角坐标的情况下就可以创建圆
  self.item = self.canvas.create_oval(x1, y1, x2, y2, fill = self.color, outline = self.color)

  # 球动
 def move_ball(self):
  self.ball_x += self.x_move #球移动后的新x坐标
  self.ball_y += self.y_move #球移动后的新y坐标
  # 碰壁回弹判断
  if self.ball_x + self.rad >= self.scrn_width: #撞到了右边的墙
   self.x_move = -self.x_move
  if self.ball_x - self.rad <= 0: #撞到了左边的墙
   self.x_move = -self.x_move
  if self.ball_y + self.rad >= self.scrn_heigh: #撞到下面的墙
   self.y_move = -self.y_move
  if self.ball_y - self.rad <= 0: #撞到上面的墙
   self.y_move = -self.y_move
  self.canvas.move(self.item, self.x_move, self.y_move) #利用x,y的移动距离控制球的移动快慢

class ScreenSaver():
 '''
 可以被启动的屏保
 '''
 #创建一个list装创建的球

 def __init__(self):
  self.balls = list()
  self.nums_balls = random.randint(6, 20) #产生随机数量的球
  self.baseFrame = tkinter.Tk() #启动界面
  self.baseFrame.overrideredirect(1) #取消边框
  #移动鼠标则退出屏保
  self.baseFrame.bind("<Motion>", self.my_quit)
  self.baseFrame.attributes('-alpha', 1)
  #键盘任意键退出屏保
  self.baseFrame.bind("<Key>",self.my_quit)
  #得到屏幕的宽和高
  w = self.baseFrame.winfo_screenwidth()
  h = self.baseFrame.winfo_screenheight()
  #创建画布
  self.canvas = tkinter.Canvas(self.baseFrame, width = w, height = h)
  self.canvas.pack()

  #在画布上画球
  for i in range(self.nums_balls):
   ball = RandomBall(self.canvas, scrn_width = w, scrn_heigh = h)
   ball.creat_ball()
   self.balls.append(ball)

  self.run_screen_saver()
  self.baseFrame.mainloop()
 #球动函数
 def run_screen_saver(self):
  for ball in self.balls:
   ball.move_ball()
  #在sleep100ms以后启动第二个参数函数,相当于100ms动一次
  self.canvas.after(100, self.run_screen_saver)
 #当事件发生时,传入event,退出屏保
 def my_quit(self, event):
  #析构(退出)屏保
  self.baseFrame.destroy()
if __name__ == "__main__":
 #启动屏保
 ScreenSaver()

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

Python 相关文章推荐
python控制台显示时钟的示例
Feb 24 Python
python使用any判断一个对象是否为空的方法
Nov 19 Python
python读取oracle函数返回值
Jul 18 Python
Python编程实现的图片识别功能示例
Aug 03 Python
Python基于socket实现简单的即时通讯功能示例
Jan 16 Python
python3解析库pyquery的深入讲解
Jun 26 Python
对python中dict和json的区别详解
Dec 18 Python
Python3.5 Json与pickle实现数据序列化与反序列化操作示例
Apr 29 Python
django2.2 和 PyMySQL版本兼容问题
Feb 17 Python
python+adb命令实现自动刷视频脚本案例
Apr 23 Python
Python实现七个基本算法的实例代码
Oct 08 Python
利用python清除移动硬盘中的临时文件
Oct 28 Python
django 微信网页授权登陆的实现
Jul 30 #Python
python tkinter库实现气泡屏保和锁屏
Jul 29 #Python
django迁移数据库错误问题解决
Jul 29 #Python
python实现桌面托盘气泡提示
Jul 29 #Python
python实现桌面气泡提示功能
Jul 29 #Python
pycharm设置鼠标悬停查看方法设置
Jul 29 #Python
django rest framework vue 实现用户登录详解
Jul 29 #Python
You might like
PHP对象克隆clone用法示例
2016/09/28 PHP
php实现的支付宝网页支付功能示例【基于TP5框架】
2019/09/16 PHP
Mac系统下搭建Nginx+php-fpm实例讲解
2020/12/15 PHP
jquery中animate动画积累的解决方法
2013/10/05 Javascript
javascript中的循环语句for语句深入理解
2014/04/04 Javascript
javascript常用代码段搜集
2014/12/04 Javascript
深入理解JavaScript系列(40):设计模式之组合模式详解
2015/03/04 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
微信小程序 image组件binderror使用例子与js中的onerror区别
2017/02/15 Javascript
浅谈 Webpack 如何处理图片(开发、打包、优化)
2019/05/15 Javascript
vue计算属性无法监听到数组内部变化的解决方案
2019/11/06 Javascript
vue 组件之间事件触发($emit)与event Bus($on)的用法说明
2020/07/28 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
详解JavaScript作用域、作用域链和闭包的用法
2020/09/03 Javascript
[00:58]2016年国际邀请赛勇士令状宣传片
2016/06/01 DOTA
Python 抓取动态网页内容方案详解
2014/12/25 Python
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
Python的Django框架中自定义模版标签的示例
2015/07/20 Python
Python 爬虫学习笔记之单线程爬虫
2016/09/21 Python
Python递归函数定义与用法示例
2017/06/02 Python
Python如何快速上手? 快速掌握一门新语言的方法
2017/11/14 Python
Python 实现使用dict 创建二维数据、DataFrame
2018/04/13 Python
python判断计算机是否有网络连接的实例
2018/12/15 Python
深入解析神经网络从原理到实现
2019/07/26 Python
python 元组的使用方法
2020/06/09 Python
详解Python遍历列表时删除元素的正确做法
2021/01/07 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
入党积极分子介绍信
2014/01/17 职场文书
实习公司领导推荐函
2014/05/21 职场文书
优秀少先队员主要事迹材料
2014/05/28 职场文书
应届生面试求职信
2014/07/02 职场文书
学生不讲诚信检讨书
2014/09/29 职场文书
护士个人年度总结范文
2015/02/13 职场文书
校园开放日新闻稿
2015/07/17 职场文书
如何用六步教会你使用python爬虫爬取数据
2022/04/06 Python