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实现将汉字转换成汉语拼音的库
May 05 Python
Pycharm编辑器技巧之自动导入模块详解
Jul 18 Python
pandas groupby 分组取每组的前几行记录方法
Apr 20 Python
python抽取指定url页面的title方法
May 11 Python
Python 实现异步调用函数的示例讲解
Oct 14 Python
对Xpath 获取子标签下所有文本的方法详解
Jan 02 Python
Python设计模式之迭代器模式原理与用法实例分析
Jan 10 Python
python turtle 绘制太极图的实例
Dec 18 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
Numpy 多维数据数组的实现
Jun 18 Python
如何通过python实现IOU计算代码实例
Nov 02 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 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
超人钢铁侠联手合作?美漫作家呼吁DC漫威合作联动以抵抗疫情
2020/04/09 欧美动漫
PHP 常见郁闷问题答解
2006/11/25 PHP
Jquery练习之表单验证实现代码
2010/12/14 Javascript
对于this和$(this)的个人理解
2013/09/08 Javascript
js onload处理html页面加载之后的事件
2013/10/30 Javascript
seajs中模块的解析规则详解和模块使用总结
2014/03/12 Javascript
javascript 获取HTML DOM父、子、临近节点
2014/06/16 Javascript
jQuery中:reset选择器用法实例
2015/01/04 Javascript
论JavaScript模块化编程
2016/03/07 Javascript
浅谈几种常用的JS类定义方法
2016/06/08 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
2017/08/17 Javascript
Angular弹出模态框的两种方式
2017/10/19 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
详解vue+vuex+koa2开发环境搭建及示例开发
2018/01/22 Javascript
layui点击数据表格添加或删除一行的例子
2019/09/12 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
JavaScript监听一个DOM元素大小变化
2020/04/26 Javascript
[04:59]2018DOTA2亚洲邀请赛 4.7 Mineski夺冠时刻
2018/04/09 DOTA
[01:06:25]Secret vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python实现的rsa加密算法详解
2018/01/24 Python
wxPython实现窗口用图片做背景
2018/04/25 Python
在Python中实现shuffle给列表洗牌
2018/11/08 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
美国领先的奢侈手表在线零售商:WatchMaxx
2017/12/17 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
创业计划书模版
2014/02/05 职场文书
2014年大班元旦活动方案
2014/02/26 职场文书
《大自然的语言》教学反思
2014/04/08 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
个人汇报材料范文
2014/12/30 职场文书
青年岗位能手事迹材料(2016推荐版)
2016/03/01 职场文书
python析构函数用法及注意事项
2021/06/22 Python
DE1103使用报告
2022/04/05 无线电
python前后端自定义分页器
2022/04/13 Python
JS实现简单的九宫格抽奖
2022/06/28 Javascript