python tkinter库实现气泡屏保和锁屏
显示效果如下:
代码:
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库实现气泡屏保和锁屏相关推荐
- python tkinter库 密码实时显示_python tkinter库实现气泡屏保和锁屏
本文实例为大家分享了python tkinter库实现气泡屏保和锁屏的具体代码,供大家参考,具体内容如下 显示效果如下: 代码: import random import tkinter import ...
- oracle密码锁屏时间,Oracle Linux OEL7 如何关闭屏保和锁屏功能
Oracle Linux OEL7 如何关闭屏保和锁屏功能 为每一个单独用户设置屏保和锁屏时间: $ gsettings set org.gnome.desktop.session idle-dela ...
- python tkinter库实现华氏温度摄氏温度转换
python tkinter库实现华氏温度摄氏温度转换 功能要求 创建GUI窗口 创建文本标签 创建可输入文本 按钮控件 创建显示文本框 温度转换函数-g 总程序 结束啦 功能要求 创建一个图形窗口, ...
- 使用python+Tkinter库构建GUI应用工具 - 个性签名工具
使用python+Tkinter库构建GUI应用工具 - 个性签名工具 安装Tkinter及pillow库 pip install tkinter # 安装tkinter库 pip install p ...
- ajax 加载 提示 锁屏,js锁屏解屏通过对$.ajax进行封装实现
jquery插件源码: /** * 对jquery中$.ajax进行封装,以便加入锁屏功能 * isAsync 是否为异步请求,默认为true * isLock 是否锁屏,默认是true * isCa ...
- 如何判断Android手机是否黑屏和锁屏
1. 前言 Android手机在一段时间未操作后,会黑屏,然后点亮屏幕后,会显示锁屏界面.在实现某些功能(例如:手机QQ的手势密码锁定)的时候,需要对黑屏或锁屏进行处理. 2. 解决方案 因为Andr ...
- linux如何解除密码锁屏图案大全,手机锁屏图案(锁屏密码)忘记了怎么办?四种方法帮你轻松搞定...
很多朋友可能为了追求新奇,对手机的各种功能都比较好奇,都想试一试.对于图案解锁这个功能也可能比较喜欢,但会不会就是刚刚设置完了就忘记了呢?那么手机锁屏图案(锁屏密码)忘记了怎么办?本文将为大家介绍四种 ...
- Android 实现屏幕的亮屏与锁屏
最近做的电子班牌需要早上7点开启,晚上8点关闭的功能,之前倒是没有接触过这类的东西,所以早上研究了一上午,赶紧记录下来 第一步:先申请权限 <!-- 屏幕唤醒 --> <uses-p ...
- 联想台式电脑开机时不显示主板logo直接黑屏进入锁屏界面因此无法进入bios模式解决方法
问题:公司让我熟悉一下linux系统指令 因此我就打算在公司的机子上装上虚拟机,但是使用VMware软件时,可能会出现一些小问题,导致虚拟机无法打开,就像下图这样: 解决1:在网上查了很久,都说先重 ...
最新文章
- matlab学习记录之基本操作整理
- 在Linux上搭建 一个简单的vsftpd服务器
- Service Mesh所应对的8项挑战
- assign复制对象_JavaScript标准对象:assign,values,hasOwnProperty和getOwnPropertyNames方法介绍...
- java中的祖先类_Java程序公共祖先类-Object
- 如何快速python入手_初学者怎么才能快速学会Python?
- 聚能聊每周精选 第十一期
- SQL SERVER 和ACCESS/excel的数据导入导出
- OpenGL Tutorial
- 基于MATLAB 关于圆的研究
- mysql创建拼音函数_MySQL汉字转换拼音(存储函数)
- win10下如何使用linux系统
- 浏览器标准模式和怪异模式之间的区别是什么?
- 23种设计模式用英语如何表达?
- Birds in Forest
- 大数据服务模型设计:默默无闻的贤内助
- RabbitMQ + TSL 实现安全访问
- python 问题Some characters could not be decoded, and were replaced with REPLACEMENT CHARACTER.
- 4个星期=一百万美金?网页创造的神话!
- HCNP路由交换学习指南(第一章)学习笔记