当前位置:   article > 正文

用Python写份【幸运】的元旦祝福

python元旦快乐代码

c2d91606ed356bbe531f2368352cfa2c.gif

在后台回复【阅读书籍】

即可获取python相关电子书~

Hi,我是山月。

明天就是元旦啦,提前祝大家元旦快乐呀~

据说,四叶草的四片叶子代表了:名誉、财富、爱情及健康。

因此山月想用四叶草给大家写份祝福,希望把幸运带给你们

c5c860cf47705712b717ecc202c6d99f.png

完整代码和用到的文件都已经打包好啦,在后台回复【元旦祝福】自取哦~

下面我们具体的来看看怎么实现的吧。

1、画一片四叶草

我们这部分用到的是tkinter,关于tkinter的基础知识,大家可以看看:初识Tkinter:一些必须掌握的基础知识

现在我们来看看吧:

  1. import tkinter
  2. #创建tkinter窗口
  3. root = tkinter.Tk()
  4. root.geometry("640x400")
  5. root.title("元旦快乐")
  6. img = tkinter.PhotoImage(file='四叶草.png')  # 导入图片
  7. tkinter.Label(root,image=img).place(relx=0.5, rely=0.5) #通过label在指定位置插入图片
  8. root.mainloop()

结果是:

0d0f7de3ccd282828d4bba4d61ad8381.png

一片小小的四叶草就显示出来啦,这步还是很简单的吧。

下一步我们就需要通过点阵字,得出每个汉字的点阵位置,并在每个位置上放上一片四叶草。

2、获取汉字的汉字点阵图

关于点阵图的知识参考自:https://blog.twofei.com/embedded/hzk.html。

下面我们来看看具体的实现代码,比如实现【元】字:

  1. import binascii
  2. import tkinter
  3. #创建tkinter窗口
  4. root = tkinter.Tk()
  5. root.geometry("640x400")
  6. root.title("元旦快乐")
  7. # 导入图片
  8. img = tkinter.PhotoImage(file='四叶草.png'
  9. # 要显示的汉字
  10. text  = ("元"
  11. #初始化点阵
  12. point_list = [] * 16
  13. for i in range(16):
  14.     point_list.append([] * 16)
  15. #获取中文的编码
  16. encode_gb = text.encode('gb2312')  
  17. hex_str = binascii.b2a_hex(encode_gb)  
  18. result = str(hex_str, encoding='utf-8'
  19. #计算在汉字库中的位置
  20. area_code = eval('0x' + result[:2]) - 0xA0 
  21. bit_code = eval('0x' + result[2:]) - 0xA0
  22. offset_position = (94 * (area_code-1) + (bit_code-1)) * 32 
  23. font_point = None
  24. #读取HZK16汉字库文件中数据
  25. with open("HZK16""rb") as font_library:
  26.     font_library.seek(offset_position)
  27.     font_point = font_library.read(32)
  28. #给16*16的点阵赋值
  29. KEYS = [0x800x400x200x100x080x040x020x01]
  30. for k in range(len(font_point) // 2):
  31.     row_list = point_list[k]
  32.     for j in range(2):
  33.         for i in range(8):
  34.             asc = font_point[k * 2 + j]
  35.             value = asc & KEYS[i]  
  36.             row_list.append(value)
  37. #获取列表里不为0的数值索引
  38. num_list = []
  39. for row in point_list:
  40.     index_point = [i for i, j in enumerate(row) if j != 0]
  41.     num_list.append(index_point)
  42. #根据索引位置放上图片
  43. for i in range(16):
  44.     for j in num_list[i] :
  45.         x =  0.05+0.01*j
  46.         y = 0.08+i*0.02
  47.         tkinter.Label(root,image=img).place(relx=x,rely=y)
  48. root.mainloop()

效果:

67e4e0da45cc93f356757a1d3ea38878.png

最后要做的就是运用循环,读取每一个汉字,然后注意留一下每个汉字之间的间隔,就万事大吉啦。

这里山月就不演示了,大家可以自己去试着完成一下。

整的代码、用到的四叶草图片和HZK16汉字库山月都给大家整理好了,在公众号后台回复【元旦祝福】既可以获取。

已经到底啦~(≧▽≦*)/~

244b4f5f8f03de1cea6bc4085e10f002.png 往 期 推 荐 345719f872acf3858c45200a863945f2.png

初识Tkinter:一些必须掌握的基础知识

2021-12-09

261d455ffa6c96b04f3edf01903161cb.png

Python自动化办公:xlwt教程(二)

2021-12-23

74e247b00638aaab637498344b84e0a5.png

圣诞福利:头像戴圣诞帽+下载神器you-get

2021-12-25

e22b134f33766dc70b1274f4b30decea.png

5个在线工具推荐

2021-12-29

6a14e489c0651bc4a6d0896868e08a53.png

716d2d11d933c51e63f0143151eaaed9.gif

您的“点赞”、“在看”和 “分享”是我们产出的动力。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/681976
推荐阅读
相关标签
  

闽ICP备14008679号