文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

python使用海龟turtle实现绘制汉字、中文

2023-10-27 12:35

关注

一、实现要求

        使用python中的turtle库绘制指定汉字、中文


二、实现思路

       1、要想实现汉字的绘制,首先需要知道汉字的笔画坐标,汉字的笔画坐标在网上有,需要使用爬虫技术抓取到指定汉字的笔画坐标信息

  2、根据汉字的笔画坐标信息,使用turrle绘制出相应的笔画,即可实现汉字的绘制


三、代码实现

1、导入需要使用到的模块信息:

import turtleimport requestsfrom urllib.parse import quoteimport re

   

2、首先,汉字的笔画坐标信息,可以在这里获取到:

https://bihua.bmcx.com/web_system/bmcx_com_www/system/file/bihua/get_0/

    因此编写函数向该网址发送数据请求信息:

ef get_word_coordinate(target_word):    """    获取指定汉字的笔画坐标    :param target_word:    :return:    """    url = "https://bihua.bmcx.com/web_system/bmcx_com_www/system/file/bihua/get_0/"    params = {        'font': quote(target_word).replace("%", "").lower(),        'shi_fou_zi_dong': '1',        'cache_sjs1': '20031914',    }    response = requests.get(url, params=params)    content = response.text    content = content.replace('hzbh.main(', '').split(');document.getElementById')[0]    content = content.split('{')[-1].split("}")[0]    pattern = re.compile(r'\w:\[(.+?)\]')    result = re.split(pattern, content)    order_xy_routine = []    words_cnt = 0    for r in result:        sec = re.findall(r'\'.+?\'', r)        if len(sec):            orders = sec[1].split('#')            for order in orders:                order_str = re.findall(r'\(\d+,\d+\)', order)                order_xy = [eval(xy) for xy in order_str]                order_xy_routine.append(order_xy)            words_cnt += 1    print(order_xy_routine)    return order_xy_routine

  该请求需要传递三个参数。数据的发回结果是一个html格式的数据,需要使用到正则表达式进行笔画坐标的解析和处理,最终得到指定汉字的坐标信息,是一个er二维的列表,形式如下所示:

[[(666, 36), (696, 66), (480, 108), (300, 138)], [(510, 102), (510, 558)], [(510, 318), (690, 318), (648, 300), (606, 318)], [(342, 234), (372
, 258), (372, 558), (342, 582), (372, 558), (696, 558), (648, 540), (600, 558)], [(36, 114), (228, 114), (270, 84), (228, 114), (90, 330), (48
, 354), (90, 330), (246, 330), (288, 300), (246, 330), (210, 522), (192, 594), (162, 642), (120, 690), (30, 750)], [(84, 390), (120, 474), (15
6, 540), (204, 600), (270, 654), (318, 678), (372, 690), (726, 702)]]
 

编写函数,调用汉字笔画坐标的获取方法,根号就坐标信息,实现指定汉字的绘制

def draw_words(target_words, startx, starty):    """    绘制汉字    :param target_words:    :param startx:    :param starty:    :return:    """    turtle.color("black", "black")  # 设置画笔颜色    turtle.pu()  # 抬起画笔    coordinates = get_word_coordinate(target_words)    for index, coordinate in enumerate(coordinates):        turtle.goto((startx + coordinate[0][0]) / 2, -(starty + coordinate[0][1]) / 2)        turtle.pd()        for xy in coordinate:            x, y = xy            turtle.goto((startx + x) / 2, -(starty + y) / 2)        turtle.pu()

  传入三个参数,第一个参数是要绘制的汉字,一次只能一个,如果要实现绘制多个,则调用该方法多次。第二三个参数分别是绘制汉字的起始x、y坐标,用于控制汉字绘制的位置。

编写主函数,调用绘制汉字的方法,传入要绘制的汉字,实现汉字的绘制效果

if __name__ == '__main__':    #要绘制的汉字    words = ['你','好']    start_x = -900    for w in words:        draw_words(w, start_x, -300)        start_x+=800    turtle.done()

  注意画笔的坐标要设置为负数。


四、运行效果

 1、

 

 3、

 

来源地址:https://blog.csdn.net/c1007857613/article/details/130758639

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯