倒计时器桌面 桌面倒计时软件怎么用( 二 )


libdir = waveshare_base.joinpath(\’lib\’)
开始先导入一些标准库之后脚本中用 。也需要你从 PIL 添加 Image、ImageDraw和ImageFont,你会用到这些来画一些简单的图形 。最后,为本地lib目录设置一些变量,该目录包含了用于 2.13 英寸显示屏的 Waveshare Python 库,稍后你可以使用这些变量从本地目录加载库 。
字体大小辅助函数
下一部分是为你选择的 Bangers-Regular.ttf 字体建立一个修改大小的辅助函数 。该函数将整型变量作为大小参数,并返回一个图形字体对象来用于显示:
def set_font_size(font_size):
【倒计时器桌面 桌面倒计时软件怎么用】logging.info(\”Loading font…\”)
return ImageFont.truetype(f\”{basedir.joinpath(\’Bangers-Regular.ttf\’).resolve}\”, font_size)
倒计时逻辑
接下来是计算这个项目的一个函数:距下次圆周率日还有多久 。如果是在一月,那么计算剩余天数将很简单 。但是你需要考虑是否今年的圆周率日是否已经过去了(允悲) 。如果是的话,那么计算在你可以再次庆祝之前还有多少天:
def countdown(now):
piday = datetime(now.year, 3, 14)
if piday
主函数
最后,到了主函数,需要初始化显示屏并向它写数据 。这时,你应该写一个欢迎语然后再开始倒计时 。但是首先,你需要加载 Waveshare 库:
def main:
if os.path.exists(libdir):
sys.path.append(f\”{libdir}\”)
from waveshare_epd import epd2in13_V2
else:
logging.fatal(f\”not found: {libdir}\”)
sys.exit(1)
上面的代码片段检查以确保该库已下载到倒计时脚本旁边的目录中,然后加载epd2in13_V2库 。如果你使用不同的显示屏,则需要使用不同的库 。如果你愿意,也可以自己编写 。我发现阅读 Waveshare 随显示屏提供的 Python 代码很有趣,它比我想象的要简单得多 。
下一段代码创建一个 EPD(电子纸显示屏)对象以与显示器交互并初始化硬件:
logging.info(\”Starting…\”)
epd = epd2in13_V2.EPD
logging.info(\”Initialize and clear…\”)
epd.init(epd.FULL_UPDATE)
epd.Clear(0xFF)
关于电子纸的一个有趣之处:它仅在将像素从白色变为黑色或从黑色变为白色时才耗电 。这意味着当设备断电或应用程序因任何原因停止时,屏幕上的任何内容都会保留下来 。从功耗的角度来看,这很好,但这也意味着你需要在启动时清除显示,否则你的脚本只会覆盖屏幕上已有的内容 。因此,epd.Clear(0xFF)用于在脚本启动时清除显示 。
接下来,创建一个“画布”来绘制剩余的显示输出:
logging.info(f\”Creating canvas – height: {epd.height}, width: {epd.width}\”)
draw = ImageDraw.Draw(image)
这与显示器的宽度和高度相匹配——但它有点反直觉,因为显示器的短边是宽度 。我认为长边是宽度,所以这只是需要注意的一点 。请注意,epd.Height</code>和epd.Width</code>由 Waveshare 库设置以对应于你使用的设备 。
欢迎语
接下来,你将开始画一些画 。这涉及在你之前创建的“画布”对象上设置数据 。这还没有将它绘制到电子纸显示屏上——你现在只是在构建你想要的图像 。由你为这个项目绘制带有一块馅饼的图像,来创建一个庆祝圆周率日的欢迎信息:
很可爱,不是吗?
logging.info(\”Set text text…\”)
bangers64 = set_font_size(64)
draw.text((0, 30), \’PI DAY!\’, font = bangers64, fill = 0)
logging.info(\”Set BMP…\”)
bmp = Image.open(basedir.joinpath(\”img\”, \”pie.bmp\”))
image.paste(bmp, (150,2))
最后,真是是最后了,你可以展示你画的图画:
logging.info(\”Display text and BMP\”)
epd.display(epd.getbuffer(image))
上面那段话更新了显示屏,以显示你所画的图像 。
接下来,准备另一幅图像展示你的倒计时:
圆周率日倒计时
首先,创建一个用来展示倒计时的图像对象 。也需要设置数字的字体大小:
logging.info(\”Pi Date countdown; press CTRL-C to exit\”)
piday_image = Image.new(\’1\’, (epd.height, epd.width), 255)
piday_draw = ImageDraw.Draw(piday_image)
bangers36 = set_font_size(36)
bangers64 = set_font_size(64)
为了使它显示的时候更像一个倒计时,更新图像的一部分是更加有效的手段,仅更改已经改变的显示数据部分 。下面的代码准备以这样方式运行:
epd.displayPartBaseImage(epd.getbuffer(piday_image))

推荐阅读