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如何通过protobuf实现rpc
Mar 06 Python
特征脸(Eigenface)理论基础之PCA主成分分析法
Mar 13 Python
Python3多目标赋值及共享引用注意事项
May 27 Python
简单了解python的内存管理机制
Jul 08 Python
python的命名规则知识点总结
Oct 04 Python
Django中使用haystack+whoosh实现搜索功能
Oct 08 Python
Django Xadmin多对多字段过滤实例
Apr 07 Python
jupyter实现重新加载模块
Apr 16 Python
在CentOS7下安装Python3教程解析
Jul 09 Python
Python之字符串的遍历的4种方式
Dec 08 Python
Python 图片处理库exifread详解
Feb 25 Python
用Python提取PDF表格的方法
Apr 11 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实现简单搜歌的方法
2015/07/28 PHP
PHP+MySQL之Insert Into数据插入用法分析
2015/09/27 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php模拟实现斗地主发牌
2020/04/22 PHP
七种PHP开发环境搭建工具
2020/06/28 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
Javascript打印网页部分内容的脚本
2008/11/17 Javascript
几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()
2009/06/02 Javascript
javascript 写类方式之六
2009/07/05 Javascript
超级有用的13个基于jQuery的内容滚动插件和教程
2011/07/31 Javascript
用循环或if语句从json中取数据示例
2014/08/18 Javascript
jQuery实现鼠标滑过Div层背景变颜色的方法
2015/02/17 Javascript
JavaScript实现身份证验证代码
2016/02/17 Javascript
理解javascript定时器中的setTimeout与setInterval
2016/02/23 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
[59:48]DOTA2-DPC中国联赛 正赛 VG vs Magma BO3 第一场 1月26日
2021/03/11 DOTA
python 布尔操作实现代码
2013/03/23 Python
跟老齐学Python之总结参数的传递
2014/10/10 Python
十分钟利用Python制作属于你自己的个性logo
2018/05/07 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
如何将 awk 脚本移植到 Python
2019/12/09 Python
Python正则表达式高级使用方法汇总
2020/06/18 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
Debenhams百货英国官方网站:Debenhams UK
2016/07/12 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
Nebula美国官网:便携式投影仪
2019/03/15 全球购物
全球工业:Global Industrial
2020/02/01 全球购物
遗体告别仪式主持词
2014/03/20 职场文书
自我推荐信范文
2014/05/09 职场文书
竞选演讲稿范文大全
2014/05/12 职场文书
2014年转正工作总结
2014/11/08 职场文书
个人典型事迹材料
2014/12/30 职场文书
告知书格式
2015/07/01 职场文书
Pytorch中的数据集划分&正则化方法
2021/05/27 Python