python tkinter库实现气泡屏保和锁屏
作者:疯牧瑾 发布时间:2021-09-17 22:37:57
标签: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()
来源:https://blog.csdn.net/qq_42029527/article/details/84944890


猜你喜欢
- 废话不多说了,直接给大家贴代码了,具体代码如下所示:<!DOCTYPE html><html lang="en&
- 获得当前机器的名字:def hostname(): sy
- 1. css背景图1.1 背景属性<!DOCTYPE html><html lang="en">
- 什么是JSON Web Token?JSON Web Token(JWT)是一个开放标准(RFC 7519),它定义了一种紧凑且自包含的方式
- 在oracle数据库的开发中,常因为时间的问题大费周章,所以特地将ORACLE数据的日期函数收藏致此。乃供他日所查也。 add_months
- 本文实例为大家分享了微信小程序实现视频播放器发送弹幕的具体代码,供大家参考,具体内容如下一、视频播放器video-detail 视频播放器s
- <? //以树型结构列出指定目录里的所有文件,如果你想知道自己某个目录里有哪些子目录和文件,可以调用这个类来查看,很方便的。 &nbs
- //User 用户的基本信息,也是USERINFO表中的3个列package 登陆判断;public class User { &
- 下面发一个简单的在线调试服务端js代码的asp源码。并可以提示代码具体错误信息。<%@language="javascrip
- 首先下载 MySQLdb #encoding=GBK import MySQLdb #import sys # #reload(sys) #
- 相信大家对街边林林总总的房产中介并不陌生,那么我们先看看下面这张图片。图1从右侧这家店的橱窗里,我们能迅速分清哪些是租房信息哪些是售房信息。
- 在blueidea上看到movoin转的一个动态加载include文件代码,接着dnawo又修改了下,我用了dnawo修改后的版本,感觉挺好
- 实例如下:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional
- Python3安装后SSL问题问题编译安装时已经指定了–with-openssl的参数并且指向了你的openssl的源码
- 年底,抽奖这个话题很多人都会讨论,都希望可以中奖。接下来我就使用 Python 中的 Tkinter 模块来实现一个简单的滚动抽奖器。一、T
- 在Numpy中经常使用到的操作由扁平化操作,Numpy提供了两个函数进行此操作,他们的功能相同,但在内存上有很大的不同.先来看这两个函数的使
- 关于php的引用(就是在变量或者函数、对象等前面加上&符号)的作用,我们先看下面这个程序。<?php
- 前言:昨晚我正在床上睡得着着的,突然来了一条短信。什么?线上的订单无法取消!我赶紧登录线上系统,查看业务日志。发现有MySQL锁超时的错误日
- 在并发访问情况下,很有可能出现不可重复读等等读现象。为了更好的应对高并发,封锁、时间戳、乐观并发控制(乐观锁)、悲观并发控制(悲观锁)都是并
- 本文实例讲述了Python读写及备份oracle数据库操作。分享给大家供大家参考,具体如下:最近项目中需要用到Python调用oracle实