python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏
本文實(shí)例為大家分享了python tkinter庫(kù)實(shí)現(xiàn)氣泡屏保和鎖屏的具體代碼,供大家參考,具體內(nèi)容如下
顯示效果如下:

代碼:
import random
import tkinter
import threading
from ctypes import *
class RandomBall(object):
"""
定義關(guān)于球的類
"""
def __init__(self, canvas, screen_width, screen_height):
"""初始化畫(huà)布和屏幕尺寸"""
self.item = None
self.canvas = canvas
# 定義球的初始位置(x,y),此坐標(biāo)為球的圓心,位置隨機(jī)生成
self.x_pos = random.randint(10, int(screen_width) - 20)
self.y_pos = random.randint(10, int(screen_height) - 20)
# 定義球在x、y方向上的移動(dòng)速度,速度隨機(jī)給定
self.x_velocity = random.randint(6, 12)
self.y_velocity = random.randint(6, 12)
# 將屏幕尺寸的形參賦給函數(shù)內(nèi)部
self.screen_width = screen_width
self.screen_height = screen_height
# 定義球的半徑,半徑大小隨機(jī)給定
self.radius = random.randint(40, 70)
# 定義球的顏色
c = lambda: random.randint(0, 255)
self.color = '#%02x%02x%02x' % (c(), c(), c())
def create_ball(self):
""" 創(chuàng)建球的函數(shù)"""
# 通過(guò)圓心,獲取一矩形左上角和右下角的坐標(biāo)
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沒(méi)有創(chuàng)建圓的函數(shù),通過(guò)創(chuàng)建橢圓的方式來(lái)生成圓
self.item = self.canvas.create_oval(x1, y1, x2, y2, fill=self.color, outline=self.color)
def move_ball(self):
"""創(chuàng)建球移動(dòng)的函數(shù)"""
# 球的(x,y)坐標(biāo)根據(jù)速度變化不斷更新
self.x_pos += self.x_velocity
self.y_pos += self.y_velocity
# 當(dāng)球撞到屏幕邊界后,反彈的算法判斷
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
# 在畫(huà)布上移動(dòng)圖畫(huà)
self.canvas.move(self.item, self.x_velocity, self.y_velocity)
class ScreenSaver(object):
"""
定義屏保的類
"""
def __init__(self):
self.balls = []
# 每次啟動(dòng)程序,球的數(shù)量隨機(jī)
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)
# 調(diào)整背景透明度
self.root.attributes('-alpha', 1)
# 點(diǎn)擊鼠標(biāo)、移動(dòng)鼠標(biāo)、敲擊鍵盤(pán)時(shí)退出程序
# 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)
# 創(chuàng)建畫(huà)布,包括畫(huà)布的歸屬、尺寸和背景顏色
self.canvas = tkinter.Canvas(self.root, width=self.width, height=self.height, bg="black")
self.canvas.pack()
# 根據(jù)num_balls隨機(jī)生成的數(shù)值,在畫(huà)布上生成球
for i in range(self.num_balls):
# 調(diào)用RandomBall函數(shù),自動(dòng)初始化出不同大小、位置和顏色的球
ball = RandomBall(self.canvas, screen_width=self.width, screen_height=self.height)
# 調(diào)用生成球的函數(shù)
ball.create_ball()
self.balls.append(ball)
self.run_screen_saver()
self.root.mainloop()
def run_screen_saver(self):
"""調(diào)動(dòng)球運(yùn)動(dòng)的函數(shù)"""
for ball in self.balls:
ball.move_ball()
# after函數(shù)是每200毫秒后啟動(dòng)一個(gè)函數(shù),第二個(gè)參數(shù)為需啟動(dòng)的函數(shù),類似于遞歸
self.canvas.after(50, self.run_screen_saver)
def my_quit(self, event):
"""定義一個(gè)停止運(yùn)行的函數(shù)"""
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):
"""調(diào)用windll函數(shù)"""
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()
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python實(shí)戰(zhàn)之用tkinter庫(kù)做一個(gè)鼠標(biāo)模擬點(diǎn)擊器
- 使用Python中tkinter庫(kù)簡(jiǎn)單gui界面制作及打包成exe的操作方法(二)
- python自帶tkinter庫(kù)實(shí)現(xiàn)棋盤(pán)覆蓋圖形界面
- python使用tkinter庫(kù)實(shí)現(xiàn)五子棋游戲
- Python使用tkinter庫(kù)實(shí)現(xiàn)文本顯示用戶輸入功能示例
- python基于Tkinter庫(kù)實(shí)現(xiàn)簡(jiǎn)單文本編輯器實(shí)例
- 教你如何使用Python Tkinter庫(kù)制作記事本
相關(guān)文章
解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題
今天小編就為大家分享一篇解決Pyinstaller 打包exe文件 取消dos窗口(黑框框)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-06-06
使用Python進(jìn)行大規(guī)模數(shù)據(jù)處理和分析
大規(guī)模數(shù)據(jù)處理和分析旨在從海量數(shù)據(jù)中提取有用的信息和見(jiàn)解,以支持決策制定和業(yè)務(wù)發(fā)展,Python憑借其豐富的生態(tài)系統(tǒng)和強(qiáng)大的庫(kù),為處理和分析數(shù)據(jù)提供了豐富的工具和資源,在本文中,我們將深入探討如何利用Python進(jìn)行大規(guī)模數(shù)據(jù)處理和分析,需要的朋友可以參考下2024-05-05
Python位置參數(shù)與關(guān)鍵字參數(shù)的區(qū)別
文主要介紹了Python函數(shù)參數(shù)的兩種基本類型:位置參數(shù)和關(guān)鍵字參數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2025-01-01
python實(shí)現(xiàn)數(shù)通設(shè)備tftp備份配置文件示例
這篇文章主要介紹了python實(shí)現(xiàn)數(shù)通設(shè)備tftp備份配置文件示例,需要的朋友可以參考下2014-04-04
Virtualenv 搭建 Py項(xiàng)目運(yùn)行環(huán)境的教程詳解
這篇文章主要介紹了Virtualenv 搭建 Py項(xiàng)目運(yùn)行環(huán)境的詳細(xì)教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
python實(shí)現(xiàn)模擬鍵盤(pán)鼠標(biāo)重復(fù)性操作Pyautogui
這篇文章主要為大家詳細(xì)介紹了python如何利用Pyautogui模擬鍵盤(pán)鼠標(biāo)重復(fù)性操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
如何利用python在剪貼板上讀取/寫(xiě)入數(shù)據(jù)
說(shuō)起處理數(shù)據(jù)就離不開(kāi)導(dǎo)入導(dǎo)出,而我們使用Pandas時(shí)候最常用的就是read_excel、read_csv了,下面這篇文章主要給大家介紹了關(guān)于如何利用python在剪貼板上讀取/寫(xiě)入數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2022-07-07
利用python讀取YUV文件 轉(zhuǎn)RGB 8bit/10bit通用
今天小編就為大家分享一篇利用python讀取YUV文件 轉(zhuǎn)RGB 8bit/10bit通用,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-12-12

