一万点暴击伤害

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

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

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

Python的拼音模块

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

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

  • 特性

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

支持多音字。

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

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

  • 安装

pip install pypinyin

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

tkinter的宽与高

    from tkinter import *

    def center_window(width, height):
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
root.geometry(size) root = Tk()
center_window(700, 700)
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**进行包裹,主要是为了美观。

整体代码

# -*- coding: utf-8 -*-
# @Author : 王翔
# @WeChat : King_Uranus
# @公众号 : 清风Python
# @GitHub : https://github.com/BreezePython
# @Date : 2019/10/10 23:19
# @Software : PyCharm
# @version :Python 3.7.3
# @File : WordsToPinyin.py from tkinter import *
from pypinyin import pinyin class WordsToPinyin:
def __init__(self, master=None):
self.root = master
self.user_input = None
self.translation = None def create_frame(self, text_info):
frame = LabelFrame(self.root, text=text_info, font=('黑体', '11'), fg='red')
frame.grid(padx=10, pady=10, sticky=NSEW)
return frame def notice(self):
frame = self.create_frame('说明')
info = "欢迎使用【清风Python】汉语注音工具\n请将待注音的汉字或句子,填写在下方的文本框内"
note = Label(frame, text=info, justify=LEFT, font=('黑体', '11'))
note.grid(sticky=EW) def user_words(self):
frame = self.create_frame('待注音汉字')
self.user_input = Text(frame, width=80, height=10, borderwidth=2, font=('黑体', '11'))
self.user_input.grid(padx=10, pady=5) @staticmethod
def split_words(words):
word_list = ""
tmp = ""
for string in words:
if len(bytes(string, 'utf-8')) == 3 and len(string) == 1:
if tmp != '':
word_list += tmp.ljust(6)
tmp = ""
word_list += string.ljust(5)
else:
tmp += string
return word_list def translate(self):
self.translation.delete(0.0, END)
total_info = ''
info = self.user_input.get(1.0, END).split('\n')
for line in info:
if not line:
continue
a = self.split_words(line)
total_info += ''.join(map(lambda x: x[0].ljust(6), pinyin(line))) + '\n'
total_info += a + '\n' self.translation.insert(1.0, total_info) def start_translate(self):
b = Button(self.root, text='开始注音', width=15, command=self.translate)
b.grid() def result_info(self):
frame = self.create_frame('执行结果')
self.translation = Text(frame, width=80, height=20, borderwidth=2, font=('黑体', '11'))
self.translation.grid(padx=10, pady=5) if __name__ == '__main__':
def center_window(width, height):
screenwidth = root.winfo_screenwidth()
screenheight = root.winfo_screenheight()
size = '%dx%d+%d+%d' % (width, height, (screenwidth - width) / 2, (screenheight - height) / 2)
root.geometry(size) root = Tk()
center_window(700, 700)
root.resizable(width=False, height=False)
root.title('清风Python--汉字注音工具')
Main = WordsToPinyin(root)
Main.notice()
Main.user_words()
Main.start_translate()
Main.result_info()
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. ftp工具无法连接到Linux服务器

    ftp工具无法连接Linux服务器,文件无法上传,是因为你的ftp服务器未搭建(或未启动) 许久没有登录腾讯云,今天想用xshell的xftp工具上传文件,却突然出现连接不上. 用22端口,可以正常登 ...

  2. 如何编译安装Linux内核

    操作系统环境 VMware workstation15 Pro ubuntu18.04 LTS 待编译内核5.3.10版本 内核下载地址 kernel.org 环境配置 在正式编译前需要安装部分软件. ...

  3. Scss的使用场景

    一.Scss 1.CSS有几个缺点 语法不够强大,没有变量和合理的样式复用机制 使得逻辑上相关的属性值必须以字面的形式重复输出,难以维护 动态的样式语言为css富裕了动态语言的特性 极大的提高了样式语 ...

  4. 单元测试JUnit案例

    被测试模块 package packagedemo; public class Largest { public int minimal(int [] array1) { int index = 0 ...

  5. Recursive Learning

    At first, I just want to learn SQL Server / T-SQL, which I hope can replace MySQL. Then, I was attra ...

  6. nyoj 257 郁闷的C小加(一)(栈、队列)

    郁闷的C小加(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 我们熟悉的表达式如a+b.a+b*(c+d)等都属于中缀表达式.中缀表达式就是(对于双目运算符来说 ...

  7. hdu 1083 Courses (最大匹配)

    CoursesTime Limit: 20000/10000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  8. 使用POI导出EXCEL工具类并解决导出数据量大的问题

    POI导出工具类 工作中常常会遇到一些图表需要导出的功能,在这里自己写了一个工具类方便以后使用(使用POI实现). 项目依赖 <dependency> <groupId>org ...

  9. oracle使用parallel并行,多线程查询

    insert into tmp (select /*parallel (a, 4)*/ * from plsuer.as_cdrindex_info_h partition(P_20170430) w ...

  10. Error: Cannot find module 'less'

    这是webpack.config 代码中引入 报错信息(在main.js中引入也是这个报错 解决办法: 安装less: npm install less --save-dev 转自: https:// ...