python3.6 tkinter实现屏保小程序


Posted in Python onJuly 30, 2019

本文实例为大家分享了python3.6 tkinter实现屏保小程序,供大家参考,具体内容如下

该小程序是在闲着没事的时候,随便写的,就当打发无聊了。

该程序是用python3.6写的,调用了python中的tkinter的库(*python2x与python3x的thinter有很多不同的地方,一定要特别注意!!!)

from random import randint
from tkinter import *

class Randball():
  def __init__(self,canvas,scrnwidth,scrnheight):
    #初始化画布
    self.canvas = canvas
    #初始化球的圆心坐标
    self.x_pos = randint(50,int(scrnwidth))#X轴的坐标 randint 随机产生一个范围内的整数
    self.y_pos = randint(50,int(scrnheight))#Y轴的坐标
    #球的移动距离
    self.x_move = 10
    self.y_move = 10
    #整个屏幕的高和宽
    self.scrnwidth =scrnwidth
    self.scrnheight =scrnheight
    #初始化球的半径
    self.randius = randint(10,80)
    #随机产生球的颜色
    rc = lambda : randint(0,255)
    self.color = '#%02x%02x%02x'%(rc(),rc(),rc())
  def create_ball(self):
    #计算得到用于创建球的四个坐标
    x1 = self.x_pos - self.randius
    y1 = self.y_pos - self.randius
    x2 = self.x_pos + self.randius
    y2 = self.y_pos + self.randius
    #画球
    self.item =self.canvas.create_oval(x1,y1,x2,y2,fill = self.color,outline = self.color)

  def move_ball(self):
    #球按照指定距离移动,如果碰到障碍就向相反的方向运动
    self.x_pos += self.x_move
    self.y_pos += self.y_move
    if self.x_pos >= self.scrnwidth - self.randius:
      self.x_move = -self.x_move
    elif self.y_pos >= self.scrnheight - self.randius:
      self.y_move = -self.y_move
    elif self.x_pos < self.randius:
      self.x_move = abs(self.x_move)
    elif self.y_pos < self.randius:
      self.y_move = abs(self.y_move)
    self.canvas.move(self.item,self.x_move,self.y_move)


class Screensaver():
  balls = []
  def __init__(self,ball_nums):
    self.win = Tk()
    self.width = self.win.winfo_screenwidth()
    self.height = self.win.winfo_screenheight()
    self.win.overrideredirect(True)
    self.win.attributes('-alpha',1)
    #绑定事件,有任何动作退出屏保
    self.win.bind('<Any-Button>',self.exit_screensaver)
    self.win.bind('<Motion>',self.exit_screensaver )
    self.canvas = Canvas(self.win,width = self.width,height = self.height,bg="#FFFFFF")#背景 颜色自己随便调整,至于啥颜色就看自己的心情了
    self.canvas.pack()


    for i in range(0,ball_nums):
        ball = Randball(self.canvas,scrnwidth=self.width,scrnheight=self.height)
        ball.create_ball()
        self.balls.append(ball)
    self.run_screensaver()
    self.win.mainloop()
  def run_screensaver(self):
    for ball in self.balls:
      ball.move_ball()
    self.canvas.after(30,self.run_screensaver)
  def exit_screensaver(self,event):
    self.win.destroy()

def main():
  Screensaver(30)#屏保上球的个数

if __name__=='__main__':
  main()

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

Python 相关文章推荐
Python模块学习 filecmp 文件比较
Aug 27 Python
Python通过解析网页实现看报程序的方法
Aug 04 Python
python中assert用法实例分析
Apr 30 Python
Python实现自动登录百度空间的方法
Jun 10 Python
浅谈python中get pass用法
Mar 19 Python
python实现名片管理系统项目
Apr 26 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
使用Python完成15位18位身份证的互转功能
Nov 06 Python
python 列表、字典和集合的添加和删除操作
Dec 16 Python
python保留小数位的三种实现方法
Jan 07 Python
python实现加密的方式总结
Jan 19 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
简单了解python变量的作用域
Jul 30 #Python
学习和使用python的13个理由
Jul 30 #Python
Win10系统下安装labelme及json文件批量转化方法
Jul 30 #Python
python利用tkinter实现屏保
Jul 30 #Python
django 微信网页授权登陆的实现
Jul 30 #Python
python tkinter库实现气泡屏保和锁屏
Jul 29 #Python
django迁移数据库错误问题解决
Jul 29 #Python
You might like
PHP模板引擎Smarty内建函数详解
2016/04/11 PHP
PHP对象的浅复制与深复制的实例详解
2017/10/26 PHP
类似框架的js代码
2006/11/09 Javascript
javascript xml为数据源的下拉框控件
2009/07/07 Javascript
基于jQuery的Tab选项框效果代码(插件)
2011/03/01 Javascript
jquery $(&quot;#variable&quot;) 循环改变variable的值示例
2014/02/23 Javascript
JavaScript函数学习总结以及相关的编程习惯指南
2015/11/16 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
一道面试题引发的对javascript类型转换的思考
2017/03/06 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
vue axios同步请求解决方案
2017/09/29 Javascript
使用DataTable插件实现异步加载数据
2017/11/19 Javascript
JavaScript实现简单动态进度条效果
2018/04/06 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
2019/07/19 Javascript
浅析Vue中拆分视图层代码的5点建议
2019/08/15 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
vue 实现动态路由的方法
2020/07/06 Javascript
详谈Object.defineProperty 及实现数据双向绑定
2020/07/18 Javascript
jQuery实现可以计算进制转换的计算器
2020/10/19 jQuery
[03:20]2015国际邀请赛全明星表演赛
2015/08/08 DOTA
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
简述Python2与Python3的不同点
2018/01/21 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
Python使用pickle模块储存对象操作示例
2018/08/15 Python
python关闭占用端口方式
2019/12/17 Python
详解anaconda离线安装pytorchGPU版
2020/09/08 Python
意大利在线高尔夫商店:Online Golf
2021/03/09 全球购物
Nike瑞士官网:Nike CH
2021/01/18 全球购物
教师求职自荐信
2014/03/09 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
土建施工员岗位职责
2014/07/16 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
入队仪式主持词
2015/07/04 职场文书
nginx里的rewrite跳转的实现
2021/03/31 Servers
在Spring-Boot中如何使用@Value注解注入集合类
2021/08/02 Java/Android