一万点暴击伤害

人懒起来太可怕了,放了个十一充分激发了我的惰性。然后公众号就这么停了半个月,好惭愧…

新学期儿子的幼儿园上线了APP,每天作业通过app布置后,家长需要陪着孩子学习,并上传视频才算完成作业。来看看今天的课后作业吧:

看到最后的千字文,我就瞬间崩溃了,别说教孩子,我自己都一堆字不认识。老婆就是因为很多字需要手机查嫌麻烦,才把辅导孩子的任务甩给了我。平时我们中英文翻译的时候,经常使用百度翻译,那么今天我们使用Python来做一个自动注音的GUI工具吧!

Python的拼音模块

Python的模块库API,每次进去习惯第一动作,就是右键翻译为中文。可Python的拼音模块不需要这么做,因为涉及拼音等模块肯定和中文有关系,文档自然是中文的喽。

那么Python的拼音模块是什么? pypinyin

  • 特性

根据词组智能匹配最正确的拼音。

支持多音字。

简单的繁体支持, 注音支持。

支持多种不同拼音/注音风格。

  • 安装

pip install pypinyin

  • 使用示例
  1. >>> from pypinyin import pinyin, lazy_pinyin, Style
  2. >>> pinyin('中心')
  3. [['zhōng'], ['xīn']]
  4. >>> pinyin('中心', heteronym=True) # 启用多音字模式
  5. [['zhōng', 'zhòng'], ['xīn']]
  6. >>> pinyin('中心', style=Style.FIRST_LETTER) # 设置拼音风格
  7. [['z'], ['x']]
  8. >>> pinyin('中心', style=Style.TONE2, heteronym=True)
  9. [['zho1ng', 'zho4ng'], ['xi1n']]
  10. >>> pinyin('中心', style=Style.BOPOMOFO) # 注音风格
  11. [['ㄓㄨㄥ'], ['ㄒㄧㄣ']]
  12. >>> pinyin('中心', style=Style.CYRILLIC) # 俄语字母风格
  13. [['чжун1'], ['синь1']]
  14. >>> lazy_pinyin('中心') # 不考虑多音字的情况
  15. ['zhong', 'xin']
  16. # Python 3(Python 2 下把 '中心' 替换为 u'中心' 即可):

tkinter的宽与高

  1. from tkinter import *
  2. def center_window(width, height):
  3. screenwidth = root.winfo_screenwidth()
  4. screenheight = root.winfo_screenheight()
  5. size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
  6. root.geometry(size)
  7. root = Tk()
  8. center_window(700, 700)
  9. root.mainloop()

上面是一个tkinter设置程序居中的简单代码,其中700 700为宽高的px值,在这里没什么问题,但宽高一直都是px值么?

答案是否定的!

Text(frame, width=80, height=20, borderwidth=2, font=('黑体', '11'))

当我们使用Text文本标签时,width和height代表的是容纳字符的长度与高度。这里width代表设置80个字符的宽度,height为20个字符的高度。

程序实现

让我们先来看看实现效果吧:

界面设计

GUI的界面比较简单,只需要有一个用户文本输入,翻译按钮,结果输出即可。

可以看到说明、待注音汉字、执行结果都通过**LabelFrame**进行包裹,主要是为了美观。

整体代码

  1. # -*- coding: utf-8 -*-
  2. # @Author : 王翔
  3. # @WeChat : King_Uranus
  4. # @公众号 : 清风Python
  5. # @GitHub : https://github.com/BreezePython
  6. # @Date : 2019/10/10 23:19
  7. # @Software : PyCharm
  8. # @version :Python 3.7.3
  9. # @File : WordsToPinyin.py
  10. from tkinter import *
  11. from pypinyin import pinyin
  12. class WordsToPinyin:
  13. def __init__(self, master=None):
  14. self.root = master
  15. self.user_input = None
  16. self.translation = None
  17. def create_frame(self, text_info):
  18. frame = LabelFrame(self.root, text=text_info, font=('黑体', '11'), fg='red')
  19. frame.grid(padx=10, pady=10, sticky=NSEW)
  20. return frame
  21. def notice(self):
  22. frame = self.create_frame('说明')
  23. info = "欢迎使用【清风Python】汉语注音工具\n请将待注音的汉字或句子,填写在下方的文本框内"
  24. note = Label(frame, text=info, justify=LEFT, font=('黑体', '11'))
  25. note.grid(sticky=EW)
  26. def user_words(self):
  27. frame = self.create_frame('待注音汉字')
  28. self.user_input = Text(frame, width=80, height=10, borderwidth=2, font=('黑体', '11'))
  29. self.user_input.grid(padx=10, pady=5)
  30. @staticmethod
  31. def split_words(words):
  32. word_list = ""
  33. tmp = ""
  34. for string in words:
  35. if len(bytes(string, 'utf-8')) == 3 and len(string) == 1:
  36. if tmp != '':
  37. word_list += tmp.ljust(6)
  38. tmp = ""
  39. word_list += string.ljust(5)
  40. else:
  41. tmp += string
  42. return word_list
  43. def translate(self):
  44. self.translation.delete(0.0, END)
  45. total_info = ''
  46. info = self.user_input.get(1.0, END).split('\n')
  47. for line in info:
  48. if not line:
  49. continue
  50. a = self.split_words(line)
  51. total_info += ''.join(map(lambda x: x[0].ljust(6), pinyin(line))) + '\n'
  52. total_info += a + '\n'
  53. self.translation.insert(1.0, total_info)
  54. def start_translate(self):
  55. b = Button(self.root, text='开始注音', width=15, command=self.translate)
  56. b.grid()
  57. def result_info(self):
  58. frame = self.create_frame('执行结果')
  59. self.translation = Text(frame, width=80, height=20, borderwidth=2, font=('黑体', '11'))
  60. self.translation.grid(padx=10, pady=5)
  61. if __name__ == '__main__':
  62. def center_window(width, height):
  63. screenwidth = root.winfo_screenwidth()
  64. screenheight = root.winfo_screenheight()
  65. size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
  66. root.geometry(size)
  67. root = Tk()
  68. center_window(700, 700)
  69. root.resizable(width=False, height=False)
  70. root.title('清风Python--汉字注音工具')
  71. Main = WordsToPinyin(root)
  72. Main.notice()
  73. Main.user_words()
  74. Main.start_translate()
  75. Main.result_info()
  76. root.mainloop()

程序打包

为了之后使用方便,我们可以通过pyinstaller将小程序打包成exe工具,这样就可以在电脑上直接使用了!

The End

OK,今天的内容就到这里,如果觉得内容对你有所帮助,欢迎点击文章右下角的“在看”。

公众号回复拼音即可获取整体代码及打包好的exe工具。

当然如果你是Pythoner欢迎访问我的github下载:https://github.com/BreezePython

期待你关注我的公众号 清风Python,如果觉得不错,希望能动动手指转发给你身边的朋友们。

作者:清风Python

目不识丁的我使用Python编写汉字注音小工具的更多相关文章

  1. 用Python编写博客导出工具

    用Python编写博客导出工具 罗朝辉 (http://kesalin.github.io/) CC 许可,转载请注明出处   写在前面的话 我在 github 上用 octopress 搭建了个人博 ...

  2. 使用Python编写打字训练小程序【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/devcloud/article/detail ...

  3. 使用Python编写打字训练小程序

    你眼中的程序猿 别人眼中的程序猿,是什么样子?打字如飞,各种炫酷的页面切换,一个个好似黑客般的网站破解.可现实呢? 二指禅的敲键盘,写一行代码,查半天百度-那么如何能让我们从外表上变得更像一个程序猿呢 ...

  4. python开发目录合并小工具 PathMerge

    前言 这个程序陆陆续续开发了几天,正好我在学Python,就一边做一边学,倒是学到不少东西. 不得不说python是快速开发的好工具. 程序做了一些改进,这两天又忙着毕设,现在才想起来发到博客上.想想 ...

  5. python 3.6 MJ小工具

    2017.07.14 update 做了个界面,不需要使用cmd命令行+文件路径的方式来使用了: 链接如下: http://www.cnblogs.com/chenyuebai/p/7150382.h ...

  6. sharedb结合elementUi编写的实时小工具

    我是使用sharedb 作为后端 ,然后前端使用的elementUI样式,编写的一个值班小工具.接下来,让我们先来了解一下sharedb是什么吧? sharedb工具 github地址:https:/ ...

  7. Python编写的记事本小程序

    用Python中的Tkinter模块写的一个简单的记事本程序,Python2.x和Python3.x的许多内置函数有所改变,所以以下分为Python2.x和Python3.x版本. 一.效果展示: 二 ...

  8. Python编写的ARP扫描工具

    源码如下: rom scapy.all import * import threading import argparse import logging import re logging.getLo ...

  9. python转exe的小工具

    其实只是在cxfreeze的基础上加了个壳,做成窗口软件了 使用了pyqt做的界面,软件发布在了开源中国上,可以直接去下面的地址查看 http://git.oschina.net/robocky/py ...

随机推荐

  1. 2、linu

    一.常用linux命令 昨日内容回顾 linux基本命令 ls 查看目录和文件ls -la 查看所有文件和目录详情(包括隐藏文件, -l和-a可以单独使用)mkdirrmdirtouchcatcdrm ...

  2. 2019.NET Conf China(中国.NET开发者峰会)活动全纪录:.NET技术之崛起,已势不可挡

    一.微软走向开放与.NET Core的诞生 当今时代,气象更新,技术飞速发展. 当今时代,开发者大概是最优秀的群体.每一位开发者,无不奋勇向前,努力追寻时代的步伐,以大无畏的精神迎接挑战,紧跟大时代成 ...

  3. 微信小程序如何解析html内容

    最近项目上遇到在微信小程序里需要显示新闻内容,新闻内容是通过接口读取的服务器中的富文本内容,是html格式的,小程序默认是不支持html格式的内容显示的,那我们需要显示html内容的时候,就可以通过w ...

  4. P3105 [USACO14OPEN]公平的摄影(正解是乱搞,我却二分了)(+二分答案总结)

    照例化简题意: 给定一个01区间,可以把0改成1,问其中最长的01数量相等的区间长度. 额很容易想到前缀和,把w弄成1,h弄成-1,然后求前缀和,然后乱搞就行了. 但是一直不太会乱搞的我却直接想到了二 ...

  5. FastDFS图片服务器单机安装步骤(修订版)

    前面已经讲 一张图秒懂微服务的网络架构,通过此文章可以了解FastDFS组件中单机安装流程. 单机版架构图 以下为单机FastDFS安装步骤 一.环境准备 CentOS 7.X libfastcomm ...

  6. MyBatis --- 映射关系【一对一、一对多、多对多】,懒加载机制

    映射(多.一)对一的关联关系 1)若只想得到关联对象的id属性,不用关联数据表 2)若希望得到关联对象的其他属性,要关联其数据表 举例: 员工与部门的映射关系为:多对一 1.创建表 员工表 确定其外键 ...

  7. 重写(OverRide)/重载(Overload)

    方法的重写规则 参数列表必须完全与被重写方法的相同: 返回类型与被重写方法的返回类型可以不相同,但是必须是父类返回值的派生类(java5 及更早版本返回类型要一样,java7 及更高版本可以不同): ...

  8. [视频演示].NET Core开发的iNeuOS物联网平台,实现从设备&PLC、云平台、移动APP数据链路闭环

    目       录 1.      概述... 1 2.      登陆信息... 2 3.      设备驱动... 3 4.      组态建模... 3 5.      手机APP. 5 6.  ...

  9. PHP7中的异常与错误处理

    PHP 中的 Exception, Error, Throwable PHP 中将代码自身异常(一般是环境或者语法非法所致)称作错误 Error,将运行中出现的逻辑错误称为异常 Exception 错 ...

  10. window,sts安装python

    1.先在python官网下载最新的python安装,安装的时候勾上所有选项 官网:https://www.python.org/downloads/ 2.在sts里安装pyDev插件,我当时直接sea ...