python实现动态壁纸_Python 实现macOS Catalina 动态壁纸定时设置

前言

很不幸,我的电脑只能装 macOS High Sierra ,但是看他们的 Catalina 和 Mojave 的壁纸好炫酷,据说还可以根据日出时间切换壁纸和暗黑模式?!尽管条件限制,我还是想体验一下动态壁纸。(想试试的戳这里,Github有相同的说明)本人刚学Python 2秒,大佬轻喷,Github也没啥项目

Windows 也能用啦:戳这里

Here we go

实现方法

计算日出时间

需要一点天文学知识,具体请看代码(文末有,百度来的)

定时任务

为了保持轻量化原则,使用自带的 sched

开机自启动

macOS 很贴心的加入了启动项功能,不用鼓捣命令行

设置壁纸

这里不太好弄,windows 下的方法不少,mac 上可以使用 appscript 模块(是在是没有办法轻量化了) from appscript import app, mactypes

def set_bg(path): #注意这里的 path 是相对于项目路径的

app('Finder').desktop_picture.set(mactypes.File(path)) # Windows version

import win32con, win32api, win32gui

import os

def set_bg(path):

path2 = ''

for c in path: #为了兼容上面的代码,采取相对路径path,再转换为绝对路径path2

if c=='/':

path2+='\\'

else:

path2+=c

# get file path

pic = os.getcwd()+'\\'+path2

# open register

regKey = win32api.RegOpenKeyEx(win32con.HKEY_CURRENT_USER,"Control Panel\\Desktop",0,win32con.KEY_SET_VALUE)

win32api.RegSetValueEx(regKey,"WallpaperStyle", 0, win32con.REG_SZ, "0")

win32api.RegSetValueEx(regKey, "TileWallpaper", 0, win32con.REG_SZ, "0")

# refresh screen

win32gui.SystemParametersInfo(win32con.SPI_SETDESKWALLPAPER, pic, win32con.SPIF_SENDWININICHANGE)

安装方法

Github 仓库地址(mac OS)

Github 仓库地址(Windows)

安装说明 (mac)

保证拥有 Python3 运行环境

在终端执行(当然你也可以pip3 install appscript && python3 Main.py)

git clone https://github.com/HelloWorldZTR/py-background.git

cd py-background && sudo chmod +x install.sh start.sh

./install.sh

会要求输入经纬度用以计算日出日落时间(float 最好)

Ctrl + C 退出终端

将 start.sh 添加到开机启动项(方法在此)

配置说明

config.json

{

"SunSet": {

"-01:00": "BackgroundImage/evening.jpeg",

"+00:00": "BackgroundImage/night.jpg"

},

"SunRise": {

"-01:00": "BackgroundImage/evening.jpeg",

"+00:00": "BackgroundImage/day.jpg"

}

}

SunSet / SunRise 是日落日出; -01:00 是之前一小时,+01:00 是之后一小时

所以,

"SunSet": {

"-01:00": "BackgroundImage/evening.jpeg"

}

指的是在日落前1小时,将壁纸换成BackgroundImage/evening.jpeg(相对于项目路径)

config.json 同时也存储 longitude 和 latitude

后话

看完这篇文章,要不再看看这篇关于黑苹果的文章?

Github地址:

https://github.com/HelloWorldZTR/py-background

https://github.com/HelloWorldZTR/py-background-for-win

42dc279b8ca24e8d84a252c29b66e56c.jpg正在上传…重新上传取消

还会有windows 版的

计算日出日落时间的代码

import math

def getsunrise(year, month, day, latitude, longitude):

zenith = 90.83333333

N1 = math.floor(275 * month / 9)

N2 = math.floor((month + 9) / 12)

N3 = (1 + math.floor((year - 4 * math.floor(year / 4) + 2) / 3))

dayOfYear = N1 - (N2 * N3) + day - 30

localOffset = math.floor(-1 * longitude * 24/360)

lngHour = longitude / 15

t = dayOfYear + ((6 - lngHour) / 24)

M = (0.9856 * t) - 3.289

L = M + (1.916 * math.sin(M * 3.1415926 / 180)) + \

(0.020 * math.sin(2 * M * 3.1415926 / 180)) + 282.634

L = L - 360

RA = (180/3.1415926) * math.atan(0.91764 * math.tan(L * 3.1415926 / 180))

Lquadrant = (math.floor(L/90)) * 90

RAquadrant = (math.floor(RA/90)) * 90

RA = RA + (Lquadrant - RAquadrant)

RA = RA / 15

sinDec = 0.39782 * math.sin(L * 3.1415926 / 180)

cosDec = math.cos(math.asin(sinDec))

cosH = (math.cos(zenith * 3.1415926 / 180) - (sinDec * math.sin(latitude *

3.1415926 / 180))) / (cosDec * math.cos(latitude * 3.1415926 / 180))

if (cosH < -1):

sunsetT = 0

return sunsetT

if (cosH > 1):

sunriseT = 0

return sunriseT

H = 360 - 180/3.1415926 * math.acos(cosH)

H = H / 15

T = H + RA - (0.06571 * t) - 6.622

UT = T - lngHour

sunriseT = UT - localOffset

return sunriseT

def getsunset(year, month, day, latitude, longitude):

zenith = 90.83333333

N1 = math.floor(275 * month / 9)

N2 = math.floor((month + 9) / 12)

N3 = (1 + math.floor((year - 4 * math.floor(year / 4) + 2) / 3))

dayOfYear = N1 - (N2 * N3) + day - 30

localOffset = math.floor(-1 * longitude * 24/360)

lngHour = longitude / 15

t = dayOfYear + ((6 - lngHour) / 24)

M = (0.9856 * t) - 3.289

L = M + (1.916 * math.sin(M * 3.1415926 / 180)) + \

(0.020 * math.sin(2 * M * 3.1415926 / 180)) + 282.634

L = L - 360

RA = (180/3.1415926) * math.atan(0.91764 * math.tan(L * 3.1415926 / 180))

Lquadrant = (math.floor(L/90)) * 90

RAquadrant = (math.floor(RA/90)) * 90

RA = RA + (Lquadrant - RAquadrant)

RA = RA / 15

sinDec = 0.39782 * math.sin(L * 3.1415926 / 180)

cosDec = math.cos(math.asin(sinDec))

cosH = (math.cos(zenith * 3.1415926 / 180) - (sinDec * math.sin(latitude *

3.1415926 / 180))) / (cosDec * math.cos(latitude * 3.1415926 / 180))

if (cosH < -1):

sunsetT = 0

return sunsetT

if (cosH > 1):

sunriseT = 0

return sunriseT

H = 180/3.1415926 * math.acos(cosH)

H = H / 15

T = H + RA - (0.06571 * t) - 6.622

UT = T - lngHour

sunsetT = UT - localOffset

return sunsetT

def format_time(timeT):

if timeT > 0:

h = int(timeT)

m = int((timeT-int(timeT))*60)

else:

h = 24+int(timeT)-1

m = int(math.fabs(timeT-int(timeT))*60)

return {'hour': h, 'minute': m}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值