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 相关文章推荐
利用Psyco提升Python运行速度
Dec 24 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
Python中修改字符串的四种方法
Nov 02 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
树莓派使用python-librtmp实现rtmp推流h264的方法
Jul 22 Python
tensorflow指定GPU与动态分配GPU memory设置
Feb 03 Python
Python坐标轴操作及设置代码实例
Jun 04 Python
python按照list中字典的某key去重的示例代码
Oct 13 Python
CocosCreator ScrollView优化系列之分帧加载
Apr 14 Python
Python万能模板案例之matplotlib绘制甘特图
Apr 13 Python
Python 图片添加美颜效果
Apr 28 Python
python manim实现排序算法动画示例
Aug 14 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
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
PHP多进程编程总结(推荐)
2016/07/18 PHP
JS 事件绑定函数代码
2010/04/28 Javascript
JScript分割字符串示例代码
2013/09/04 Javascript
JS中把字符转成ASCII值的函数示例代码
2013/11/21 Javascript
jquery数组之存放checkbox全选值示例代码
2013/12/20 Javascript
js jquery分别实现动态的文件上传操作按钮的添加和删除
2014/01/13 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
浅析js中substring和substr的方法
2015/11/09 Javascript
JavaScript中apply方法的应用技巧小结
2016/09/29 Javascript
深入理解Node中的buffer模块
2017/06/03 Javascript
详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)
2017/07/13 Javascript
理解javascript async的用法
2017/08/22 Javascript
解决vue+webpack项目接口跨域出现的问题
2020/08/10 Javascript
angular8.5集成TinyMce5的使用和详细配置(推荐)
2020/11/16 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
[01:06:26]全国守擂赛第二周 Team Coach vs DeMonsTer
2020/04/28 DOTA
python简单实现基于SSL的IRC bot实例
2015/06/15 Python
Python3.5运算符操作实例详解
2019/04/25 Python
Python单元测试工具doctest和unittest使用解析
2019/09/02 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
详解python 内存优化
2020/08/17 Python
利用python绘制中国地图(含省界、河流等)
2020/09/21 Python
python合并多个excel文件的示例
2020/09/23 Python
植村秀美国官网:Shu Uemura美国
2019/03/19 全球购物
递归计算如下递归函数的值(斐波拉契)
2012/02/04 面试题
计算机开发个人求职信范文
2013/09/26 职场文书
自我鉴定书面格式
2014/01/13 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
酒后驾车标语
2014/06/30 职场文书
2015年党员自评材料
2014/12/17 职场文书
投标承诺函格式
2015/01/21 职场文书
追悼会答谢词范文
2015/09/29 职场文书
德生BCL3000抢先使用感受和评价
2022/04/07 无线电