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 相关文章推荐
tornado捕获和处理404错误的方法
Feb 26 Python
Python中进程和线程的区别详解
Oct 29 Python
Python3实现发送QQ邮件功能(附件)
Dec 23 Python
Python 利用scrapy爬虫通过短短50行代码下载整站短视频
Oct 29 Python
Mac在python3环境下安装virtualwrapper遇到的问题及解决方法
Jul 09 Python
如何使用python实现模拟鼠标点击
Jan 06 Python
pytorch 利用lstm做mnist手写数字识别分类的实例
Jan 10 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
Python configparser模块常用方法解析
May 22 Python
pycharm软件实现设置自动保存操作
Jun 08 Python
详解pycharm2020.1.1专业版安装指南(推荐)
Aug 07 Python
Python绘画好看的星空图
Mar 17 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实现12306余票查询、价格查询示例
2014/04/17 PHP
浅谈php扩展imagick
2014/06/02 PHP
自编函数解决pathinfo()函数处理中文问题
2014/11/03 PHP
PHP实现bitmap位图排序与求交集的方法
2016/07/28 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
用ASP将SQL搜索出来的内容导出为TXT的代码
2007/07/27 Javascript
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
node.js中的fs.readdirSync方法使用说明
2014/12/17 Javascript
简介JavaScript中Math.LOG10E属性的使用
2015/06/14 Javascript
jQuery实现下拉框功能实例代码
2016/05/06 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
Vue-cli3.x + axios 跨域方案踩坑指北
2019/07/04 Javascript
如何在JavaScript中创建具有多个空格的字符串?
2020/02/23 Javascript
[01:16:12]完美世界DOTA2联赛PWL S2 FTD vs Inki 第一场 11.21
2020/11/23 DOTA
python代码检查工具pylint 让你的python更规范
2012/09/05 Python
为Python程序添加图形化界面的教程
2015/04/29 Python
python读写json文件的简单实现
2017/04/11 Python
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
Python编写Windows Service服务程序
2018/01/04 Python
Python2和Python3之间的str处理方式导致乱码的讲解
2019/01/03 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
python 实现Requests发送带cookies的请求
2021/02/08 Python
Stuart Weitzman欧盟:美国奢华鞋履品牌
2017/05/24 全球购物
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
塑料制成的可水洗的编织平底鞋和鞋子:Rothy’s
2018/09/16 全球购物
Moda Italia荷兰:意大利男士服装
2019/08/31 全球购物
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
创业计划书如何吸引他人眼球
2014/01/10 职场文书
小学红领巾中秋节广播稿
2014/01/13 职场文书
公司门卫工作职责
2014/06/28 职场文书
万能检讨书2000字
2014/10/17 职场文书
2014年党员整改措施
2014/10/24 职场文书
质量保证书格式模板
2015/02/27 职场文书