用 python+tkinter+有道云API 写一个自用的背单词软件

目录

导语

程序功能

需要用的工具

需要安装的python包

程序代码

功能类函数Functions

键盘响应

窗体设置

Sql连接

Gui程序打包

结语

参考文献


导语

最近在学英语,新单词需要反复背,所以就想写一个可以自己存储单词的应用。在开始写之前搜索了一下有没有人已经做好了,只查到一篇文章有比较相关的思路,但是功能只有随机抽取单词,以及需要从外部构建好CSV表格导入进去,不够方便,所以得自己写了。刚好tkinter也一直没有学过,就趁这次的机会边学边写。

程序功能

程序主要分为三个功能区,分别是:

Search模块:用于检索词库中的单词

Upload模块:用于向词库加入新单词

Next模块:用于背单词,由Next和Answer两个按键共同实现

最后呈现的功能如图所示:

需要用的工具

python 3.6

postgreSQL(用于存储词库,也可以用excel,但是响应速度慢,个人不建议)

需要安装的python包

tkinter:构建python中的Gui窗体

sqlalchemy:用于sql的连接

playsound:播放单词发音

urllib.request:从有道的API接口获取单词发音

pyinstaller:将py文件打包成exe

程序代码

程序的整体结构如图所示

功能类函数Functions

类Functions 是程序的功能集合,由Add_Words(新增单词),Next_Random(随机抽取单词)Play_Sound(播放单词发音)Search_Word(检索单词)Show_Answer(显示单词释义)五个子函数构成。

这部分遇到的几个问题汇总如下:

  1. 单词发音获取:有道API获取单词发音十分方便,直接通过API接口加单词访问,参数type表示美音(0)/英音(1),audio表示对应单词。本来希望通过爬虫直接实现连网播放,尝试未果,最后还是老老实实地将单词下载到本地文件夹,每次查询单词的时候调用playsound包实现MP3的发音播放。接口也支持词组,但是词组里有空格,在访问网页时,需要将词组中的空格替换为‘%20’.
  2. 发音包的选择:在实现发音功能的时候尝试了许多包,playsound, pyaudio, playgame等,许多包运行出错,playsound运行成功但是响应速度大概需要肉眼可见的0.5秒。这边可以再试一下其他的包效果是否会更好。
class Functions():
    def __init__(self):
        self.count = 0  # 用于单词计数
        self.sql = Connect('English_words')  # 数据库连接
        self.url = 'http://dict.youdao.com/dictvoice?type=0&audio='  # 有道云单词发音API
        data = self.sql.load('word_list')
        self.word_list = list(set(data['单词']))  # 词库单词列表

    def Next_Random(self):
        '''
        从词库中随机抽取单词
        '''
        global text, word, counter, url, ans
        self.count += 1
        word = choice(self.word_list)  # 随机选择一个词
        text.configure(text=word)  # 在text控件中显示单词
        counter.configure(text='第' + str(self.count) + '个单词')  # 在counter控件中显示计数
        ans.config(text='')
        root.update_idletasks()
        try:  # 尝试播放单词发音
            self.Play_Sound()
        except:
            pass

    def Search_Word(self):
        '''
        在词库中检索单词并返回释义、发音
        '''
        global key, word
        word = key.get().lower()  # 从key控件中获取输入
        text.configure(text=word)  # 在text控件中显示单词
        try:  # 若词库中有该词,则显示释义并播放声音,否则 提示未收录
            self.Show_Answer()
            self.Play_Sound()
        except:
            ans.config(text='未收录
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值