显示效果如下:

代码:

import random
import tkinter
import threading
from ctypes import *class RandomBall(object):"""定义关于球的类"""def __init__(self, canvas, screen_width, screen_height):"""初始化画布和屏幕尺寸"""self.item = Noneself.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_widthself.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.radiusy1 = self.y_pos - self.radiusx2 = self.x_pos + self.radiusy2 = 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_velocityself.y_pos += self.y_velocity# 当球撞到屏幕边界后,反弹的算法判断if self.x_pos + self.radius >= self.screen_width:self.x_velocity = -self.x_velocityif self.x_pos - self.radius <= 0:self.x_velocity = -self.x_velocityif self.y_pos + self.radius >= self.screen_height:self.y_velocity = -self.y_velocityif 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 = 0xffffself.WM_SYS_COMMAND = 0x0112self.SC_MONITOR_POWER = 0xF170self.MonitorPowerOff = 2self.SW_SHOW = 5def 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 tkinter库实现气泡屏保和锁屏相关推荐

  1. python tkinter库 密码实时显示_python tkinter库实现气泡屏保和锁屏

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

  2. oracle密码锁屏时间,Oracle Linux OEL7 如何关闭屏保和锁屏功能

    Oracle Linux OEL7 如何关闭屏保和锁屏功能 为每一个单独用户设置屏保和锁屏时间: $ gsettings set org.gnome.desktop.session idle-dela ...

  3. python tkinter库实现华氏温度摄氏温度转换

    python tkinter库实现华氏温度摄氏温度转换 功能要求 创建GUI窗口 创建文本标签 创建可输入文本 按钮控件 创建显示文本框 温度转换函数-g 总程序 结束啦 功能要求 创建一个图形窗口, ...

  4. 使用python+Tkinter库构建GUI应用工具 - 个性签名工具

    使用python+Tkinter库构建GUI应用工具 - 个性签名工具 安装Tkinter及pillow库 pip install tkinter # 安装tkinter库 pip install p ...

  5. ajax 加载 提示 锁屏,js锁屏解屏通过对$.ajax进行封装实现

    jquery插件源码: /** * 对jquery中$.ajax进行封装,以便加入锁屏功能 * isAsync 是否为异步请求,默认为true * isLock 是否锁屏,默认是true * isCa ...

  6. 如何判断Android手机是否黑屏和锁屏

    1. 前言 Android手机在一段时间未操作后,会黑屏,然后点亮屏幕后,会显示锁屏界面.在实现某些功能(例如:手机QQ的手势密码锁定)的时候,需要对黑屏或锁屏进行处理. 2. 解决方案 因为Andr ...

  7. linux如何解除密码锁屏图案大全,手机锁屏图案(锁屏密码)忘记了怎么办?四种方法帮你轻松搞定...

    很多朋友可能为了追求新奇,对手机的各种功能都比较好奇,都想试一试.对于图案解锁这个功能也可能比较喜欢,但会不会就是刚刚设置完了就忘记了呢?那么手机锁屏图案(锁屏密码)忘记了怎么办?本文将为大家介绍四种 ...

  8. Android 实现屏幕的亮屏与锁屏

    最近做的电子班牌需要早上7点开启,晚上8点关闭的功能,之前倒是没有接触过这类的东西,所以早上研究了一上午,赶紧记录下来 第一步:先申请权限 <!-- 屏幕唤醒 --> <uses-p ...

  9. 联想台式电脑开机时不显示主板logo直接黑屏进入锁屏界面因此无法进入bios模式解决方法

    问题:公司让我熟悉一下linux系统指令 因此我就打算在公司的机子上装上虚拟机,但是使用VMware软件时,可能会出现一些小问题,导致虚拟机无法打开,就像下图这样:  解决1:在网上查了很久,都说先重 ...

最新文章

  1. matlab学习记录之基本操作整理
  2. 在Linux上搭建 一个简单的vsftpd服务器
  3. Service Mesh所应对的8项挑战
  4. assign复制对象_JavaScript标准对象:assign,values,hasOwnProperty和getOwnPropertyNames方法介绍...
  5. java中的祖先类_Java程序公共祖先类-Object
  6. 如何快速python入手_初学者怎么才能快速学会Python?
  7. 聚能聊每周精选 第十一期
  8. SQL SERVER 和ACCESS/excel的数据导入导出
  9. OpenGL Tutorial
  10. 基于MATLAB 关于圆的研究
  11. mysql创建拼音函数_MySQL汉字转换拼音(存储函数)
  12. win10下如何使用linux系统
  13. 浏览器标准模式和怪异模式之间的区别是什么?
  14. 23种设计模式用英语如何表达?
  15. Birds in Forest
  16. 大数据服务模型设计:默默无闻的贤内助
  17. RabbitMQ + TSL 实现安全访问
  18. python 问题Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
  19. 4个星期=一百万美金?网页创造的神话!
  20. HCNP路由交换学习指南(第一章)学习笔记

热门文章

  1. 2019如何快速养实时号引流精准粉丝?微博引流实战技巧篇
  2. 基于STM32的智能门禁系统
  3. Recognition Emotion Cause in Conversations 论文阅读笔记
  4. SIMATIC S7-1200以及SIMATICS G120组态
  5. 数图互通房产管理系统优势
  6. html制作晚安,制作快手的晚安的说说
  7. 新员工入职培训企业内训ppt模板
  8. 用appimagelauncher安装markdown编辑工具marktext
  9. 四发四收迫零matlab,波束成型问题请教
  10. 计算机学院新年祝福语,学院发给职工的新年祝福短信