草庐IT

如何通过Python制作日历壁纸

嵌入式软件实战派 2023-04-17 原文

自从看了冬奥会的开幕式,二十四节气的倒计时,祖国大好河山,美轮美奂,于是想搜索个图当壁纸。

作为一个有追求的程序员,更是个实用主义的人,要是壁纸上能加个日历就更好了。

将日历P上去?

小了,格局小了,作为程序员,我肯定是让程序生成一个的。

Flag是立了,草率了,活儿是挺多的。

得搞个万年历吧,看上去so easy!

不知道啥算法,百度里倒是能找出很多,五花八门。

后来,我查看了和万年历网页源码,反复研究了javascrip的实现方式。

leapDays:function(y) {

 if(calendar.leapMonth(y)) {

   return((calendar.lunarInfo[y-1900] & 0x10000)? 30: 29);

 }

 return(0);

},

其实,计算农历日期大多都是通过枚举日期数据的,而且大多都只能算到2050年。

作为优秀的程序员,我怎么可能满足于2050年,还说“万年”历呢!

好家伙,这水越趟越深了,直到我找到了一个较ephem的库。

以为很顺利的,谁知ephem这货是研究天文星体的。当然研究天文的东西,肯定可以算日期,包括农历天干地支等。

越看越糊涂,好想放弃,但是又不甘心,退回枚举的方法吧,又觉得太low了。

突然感觉自己是个倔强的程序员……

好了,在我日夜奋战努力专研攻克下,还真让我做出来了。

(中间省略1M个字……)

这么好的东西,取个名字吧,英文就叫CalendarWallpaper吧,缩写CalWp。

中文呢,万年历壁纸生成器,简称“万年壁”?呃……太俗了!

日历壁纸生成器,简称“日壁”?

……

算了,以后有灵感了再取名。

作为实用主义的优秀程序员,名字啥的都有点浮云。

先验证下功能!

1. 日历时间范围

我追求的目标是“上下五千年”,先挑几个时间点看看。

首先,来个大唐王朝的时间755年

还行嘛!

再来个《三体》世界里的年代,2205年水滴对地球舰队发起攻击。

其实,听说ephem可以算任意日期,我有点不信,不过我没验证出溢出问题。这个库有个儒略日的概念,儒略日起于公元前4713年。往后呢,都是推算的,反正我输入很长的年份都能得到结果……

2. 日历在壁纸的位置

为了适合各种小伙伴各种追求,支持九个位置。

程序输入对应位置名称即可匹配。

3. 壁纸大小问题

目前支持电脑的宽屏,1280*720,2K,4K甚至8K的图都能很好适配。

手机屏幕尺寸的呢?目前没有,计划适配。

竖屏壁纸自动适配还在研究中。

4. 日历的周数和周一还是周日是第一天问题

有小伙伴可能是项目管理人员,喜欢关注周数,即当前周是这年的第几周。

有,通通满足你。

不过这里周数的定义没有统一的标准,比如每年的1月1日算第几周问题?目前很多公司都不一样,尽管现在有个ISO-8601的标准。

不过没关系,我提供参数让你们选,你说1月1是第一周可以,定义为ISO的标准也行。

来,我们先看看效果;

下图左边日历效果是将1月1日定为第一周,周一是每周的第一天的效;

右边日历是将1月1日定为ISO周数规则,并设置周日为一周的第一天的效果。

5. 色调和底色问题

有的软妹子程序媛喜欢淡淡的小清新壁纸,有的资深老手攻城狮喜欢深色神秘的壁纸。

都满足你们,这有两种色调四种配置。

这个配置解释比较废口水,看下图,你们对比下就能明白。

6. 在线壁纸适配

论壁纸,肯定有小伙伴会盯上Bing搜索主页的背景图,每日一图,还不重样。

这点小心思,我懂,通通安排。支持在线获取当天Bing主页图当壁纸。

还不满足?好了,除了当天的,昨天的前天的大前天的……通通支持(最大可支持向前6天图片)!

说了这么多,来个效果图看看

7. 显示整年日历

通过--wholeyear选项可以输出整年日历壁纸(需要V1.1版本或以上才支持),例如

CalWp.exe --wholeyear --dispwk --wknum=1

可以得到以下效果壁纸

8.横向日历显示

通过--horizon选项可以输出横向日历壁纸(需要V1.2版本或以上才支持),例如

CalWp.exe --horizon -i pic.jpg --anchor=top

可以得到以下效果壁纸

 

9. 如何获得这个软件

上面说的天花乱坠的,要亲自试试才真的知道好不好。

那么,怎么获得这个软件呢?

关注公众号“嵌入式软件实战派”,聊天界面回复“CalWp"或者”日历壁纸“即可获得下载链接。

或者通过点击该CSDN链接[CalendarWallpaper日历壁纸]下载。

8. 注意事项

日历壁纸生成软件开放给大家做学习研究使用,未经允许,不得挪作他用。

制作的壁纸也要注意图片版权问题,不要乱做商业用途哦。

如果你有其他疑问、建议或者其他奇思妙想,可以在公众号对话框留言,或者发邮件给我。

有关如何通过Python制作日历壁纸的更多相关文章

  1. ruby - 如何使用 Nokogiri 的 xpath 和 at_xpath 方法 - 2

    我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div

  2. ruby - 如何从 ruby​​ 中的字符串运行任意对象方法? - 2

    总的来说,我对ruby​​还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用

  3. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  4. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  5. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  6. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  7. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  8. ruby - 如何指定 Rack 处理程序 - 2

    Rackup通过Rack的默认处理程序成功运行任何Rack应用程序。例如:classRackAppdefcall(environment)['200',{'Content-Type'=>'text/html'},["Helloworld"]]endendrunRackApp.new但是当最后一行更改为使用Rack的内置CGI处理程序时,rackup给出“NoMethodErrorat/undefinedmethod`call'fornil:NilClass”:Rack::Handler::CGI.runRackApp.newRack的其他内置处理程序也提出了同样的反对意见。例如Rack

  9. ruby - 如何每月在 Heroku 运行一次 Scheduler 插件? - 2

    在选择我想要运行操作的频率时,唯一的选项是“每天”、“每小时”和“每10分钟”。谢谢!我想为我的Rails3.1应用程序运行调度程序。 最佳答案 这不是一个优雅的解决方案,但您可以安排它每天运行,并在实际开始工作之前检查日期是否为当月的第一天。 关于ruby-如何每月在Heroku运行一次Scheduler插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/8692687/

  10. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

随机推荐