python tkinter库实现气泡屏保和锁屏


Posted in Python onJuly 29, 2019

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

显示效果如下:

python tkinter库实现气泡屏保和锁屏

代码: 

import random
import tkinter
import threading
from ctypes import *
 
 
class RandomBall(object):
 """
 定义关于球的类
 """
 def __init__(self, canvas, screen_width, screen_height):
  """初始化画布和屏幕尺寸"""
  self.item = None
  self.canvas = canvas
  # 定义球的初始位置(x,y),此坐标为球的圆心,位置随机生成
  self.x_pos = random.randint(10, int(screen_width) - 20)
  self.y_pos = random.randint(10, int(screen_height) - 20)
  # 定义球在x、y方向上的移动速度,速度随机给定
  self.x_velocity = random.randint(6, 12)
  self.y_velocity = random.randint(6, 12)
  # 将屏幕尺寸的形参赋给函数内部
  self.screen_width = screen_width
  self.screen_height = screen_height
  # 定义球的半径,半径大小随机给定
  self.radius = random.randint(40, 70)
  # 定义球的颜色
  c = lambda: random.randint(0, 255)
  self.color = '#%02x%02x%02x' % (c(), c(), c())
 
 def create_ball(self):
  """ 创建球的函数"""
  # 通过圆心,获取一矩形左上角和右下角的坐标
  x1 = self.x_pos - self.radius
  y1 = self.y_pos - self.radius
  x2 = self.x_pos + self.radius
  y2 = self.y_pos + self.radius
  # tkinter没有创建圆的函数,通过创建椭圆的方式来生成圆
  self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
 
 def move_ball(self):
  """创建球移动的函数"""
  # 球的(x,y)坐标根据速度变化不断更新
  self.x_pos += self.x_velocity
  self.y_pos += self.y_velocity
  # 当球撞到屏幕边界后,反弹的算法判断
  if self.x_pos + self.radius >= self.screen_width:
   self.x_velocity = -self.x_velocity
  if self.x_pos - self.radius <= 0:
   self.x_velocity = -self.x_velocity
  if self.y_pos + self.radius >= self.screen_height:
   self.y_velocity = -self.y_velocity
  if self.y_pos - self.radius <= 0:
   self.y_velocity = -self.y_velocity
  # 在画布上移动图画
  self.canvas.move(self.item, self.x_velocity, self.y_velocity)
 
 
class ScreenSaver(object):
 """
 定义屏保的类
 """
 def __init__(self):
  self.balls = []
  # 每次启动程序,球的数量随机
  self.num_balls = random.randint(20, 60)
  # 生成root主窗口
  self.root = tkinter.Tk()
  # 获取屏幕尺寸,作为主窗口尺寸
  self.width = self.root.winfo_screenwidth()
  self.height = self.root.winfo_screenheight()
  # 取消边框
  self.root.overrideredirect(1)
  # 调整背景透明度
  self.root.attributes('-alpha', 1)
  # 点击鼠标、移动鼠标、敲击键盘时退出程序
  # self.root.bind('<Motion>', self.my_quit)
  # self.root.bind('<Any-Button>', self.my_quit)
  self.root.bind('<Control-Shift-KeyPress-L>', self.my_quit)
  # 创建画布,包括画布的归属、尺寸和背景颜色
  self.canvas = tkinter.Canvas(self.root, width=self.width, height=self.height, bg="black")
  self.canvas.pack()
 
  # 根据num_balls随机生成的数值,在画布上生成球
  for i in range(self.num_balls):
   # 调用RandomBall函数,自动初始化出不同大小、位置和颜色的球
   ball = RandomBall(self.canvas, screen_width=self.width, screen_height=self.height)
   # 调用生成球的函数
   ball.create_ball()
   self.balls.append(ball)
  self.run_screen_saver()
  self.root.mainloop()
 
 def run_screen_saver(self):
  """调动球运动的函数"""
  for ball in self.balls:
   ball.move_ball()
  # after函数是每200毫秒后启动一个函数,第二个参数为需启动的函数,类似于递归
  self.canvas.after(50, self.run_screen_saver)
 
 def my_quit(self, event):
  """定义一个停止运行的函数"""
  self.root.destroy()
  print(event)
 
 
class LockScreen(object):
 """定义锁屏的类"""
 def __init__(self):
  self.HWND_BROADCAST = 0xffff
  self.WM_SYS_COMMAND = 0x0112
  self.SC_MONITOR_POWER = 0xF170
  self.MonitorPowerOff = 2
  self.SW_SHOW = 5
 
 def win_dll(self):
  """调用windll函数"""
  windll.user32.PostMessageW(self.HWND_BROADCAST, self.WM_SYS_COMMAND,
         self.SC_MONITOR_POWER, self.MonitorPowerOff)
  shell32 = windll.LoadLibrary("shell32.dll")
  shell32.ShellExecuteW(None, 'open', 'rundll32.exe',
        'USER32,LockWorkStation', '', self.SW_SHOW)
 
 
if __name__ == '__main__':
 ScreenSaver()
 t = threading.Thread(target=LockScreen().win_dll())
 t.start()

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

Python 相关文章推荐
Python 3中print函数的使用方法总结
Aug 08 Python
python OpenCV学习笔记直方图反向投影的实现
Feb 07 Python
python实现装饰器、描述符
Feb 28 Python
python筛选出两个文件中重复行的方法
May 31 Python
Python正则表达式匹配和提取IP地址
Jun 06 Python
Python3实现二叉树的最大深度
Sep 30 Python
Python常用模块os.path之文件及路径操作方法
Dec 03 Python
virtualenv介绍及简明教程
Jun 23 Python
Python 爬虫批量爬取网页图片保存到本地的实现代码
Dec 24 Python
一些让Python代码简洁的实用技巧总结
Aug 23 Python
Python之Matplotlib绘制热力图和面积图
Apr 13 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 Python
django迁移数据库错误问题解决
Jul 29 #Python
python实现桌面托盘气泡提示
Jul 29 #Python
python实现桌面气泡提示功能
Jul 29 #Python
pycharm设置鼠标悬停查看方法设置
Jul 29 #Python
django rest framework vue 实现用户登录详解
Jul 29 #Python
python实现倒计时小工具
Jul 29 #Python
django rest framework 实现用户登录认证详解
Jul 29 #Python
You might like
phpmyadmin操作流程
2006/10/09 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
CI(CodeIgniter)框架视图中加载视图的方法
2017/03/24 PHP
PHP JWT初识及其简单示例
2018/10/10 PHP
PHP微信支付结果通知与回调策略分析
2019/01/10 PHP
jquery中animate动画积累的解决方法
2013/10/05 Javascript
原始XMLHttpRequest方法详情回顾
2013/11/28 Javascript
Javascript基础教程之比较操作符
2015/01/18 Javascript
全面解析Bootstrap表单使用方法(表单控件)
2015/11/24 Javascript
js使用cookie记录用户名的方法
2015/11/26 Javascript
深入浅析JavaScript中数据共享和数据传递
2016/04/25 Javascript
Angular2 多级注入器详解及实例
2016/10/30 Javascript
详解使用路由延迟加载 Angular 模块
2017/10/12 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
js实现图片推拉门效果代码实例
2019/05/18 Javascript
JavaScript 实现HTML DOM增删改查操作的常见方法详解
2020/01/04 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
使用vue cli4.x搭建vue项目的过程详解
2020/05/08 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
关于vue的列表图片选中打钩操作
2020/09/09 Javascript
react使用antd表单赋值,用于修改弹框的操作
2020/10/29 Javascript
Python读取图片EXIF信息类库介绍和使用实例
2014/07/10 Python
九步学会Python装饰器
2015/05/09 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python实现集中式的病毒扫描功能详解
2019/07/09 Python
关于tf.nn.dynamic_rnn返回值详解
2020/01/20 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
美国百货齐全的精品网站,提供美式风格的产品:Overstock.com
2016/07/22 全球购物
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
华纳兄弟工作室的官方授权商店:WB Shop
2018/11/30 全球购物
Wallis官网:英国女装零售商
2020/01/21 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
校园安全主题班会
2015/08/12 职场文书
win11电脑关机鼠标灯还亮怎么解决? win11关机后鼠标灯还亮解决方法
2023/01/09 数码科技