用Tkinter做一個每日英語的程序

一、準備:

安裝以下庫:

  • Tkinter
  • requests
  • pillow
  • playsound
  • pyinstaller

二、步驟分析:

  1. 找到一個合適的接口,獲取推送每日英語的數據。
    作者在網上看了一些API,沒有比較合適的,就自己找了個接口,金山詞典的每日一句:
    點我點我^v^: 傳送門

    看起來很舒服的,省去了不少麻煩,進入傳送門就是我們需要的數據,每次請求數據的時候只用改下日期就可以了圖片1

  2. 接下來的任務就是,利用Tkinter擼個簡單界面出來。通過請求返回的數據可以添加文字和美圖和語音
    圖片2

  3. 項目打包,這裏我們選擇pyinstaller來進行打包成exe可執行程序。
    pyinstaller -F -w -i [你的icon圖片路徑] [python源文件路徑]

三、難點解決

  1. 安裝pyinstall時,可能會報錯,缺少一些東西。可以先安裝 pywin32和wheel在試一下
  2. 圖片和音頻是給我們的url,如何應用?
    請求圖片url,用io.BytesIO 在內容中讀寫bytes,用Image.open打開,通過ImageTk來實現
    在這裏插入圖片描述
    音頻URL,這裏推薦使用 playsound(url)就可以了
    在這裏插入圖片描述
  3. 打包的時候,不通過,檢查下你的ico是不是16X16

四、代碼一瞥:

# -*- coding: utf-8 -*-
# @Time    : 2020-3-20 下午 23:10
# @Author  : xiong
# @Site    :
# @File    : DailyEnglish.py
# @Software: PyCharm


import tkinter as tk
import io
import requests
from PIL import Image ,ImageTk
import datetime as Date
from playsound import playsound

class DailyEnglish:
    def __init__(self):
        # 創建主窗口
        App = tk.Tk()
        # 設置標題
        App.title("每日英語  by260245435")
        #圖標
        App.iconbitmap('D:\QQ飛車2.0極速版\QQ飛車\otherconfigfile\JSStudio.ico')
        # 設置大小和位置
        App.geometry('800x400+500+300')
        # 進入消息循環,可以寫控件
        self.dataGet()
        self.create(App)
        App.mainloop()

    def dataGet(self):
        self.date = Date.datetime.now().date()
        url = 'http://sentence.iciba.com/index.php?callback=jQuery19006703403891818815_1584669649852&c=dailysentence&m=getdetail&title={}&_=1584669649854'.format(
            self.date)
        js = requests.get(url).text
        data = eval(js[js.index('(') + 1:js.rindex(')')])
        self.sentence = data['content']  # 英文句子
        self.title = data['title']  # 日期
        self.note = data['note']  # 中文
        self.pic_url = data['picture'].replace('\\', '')  # 圖片url
        self.tts_url = data['tts'].replace('\\', '')  # 音頻url

    def playSound(self):
        playsound(self.tts_url)

    def tkImg(self ,pic_url):
        req = requests.get(pic_url).content
        Iopic = io.BytesIO(req)
        img = Image.open(Iopic)
        return ImageTk.PhotoImage(img)

    def create(self , App):
        # 日期
        d1 = tk.Label(App,text="Today is:" + str(self.date),font=("Comic Sans MS", 18),anchor='center')
        d1.pack()

        # 英文tkinter編寫日曆
        t1 = tk.Label(App,text=self.sentence,font=("Comic Sans MS", 18),wraplength=800,justify="left",anchor='center')
        t1.pack()

        # 中文
        t2 = tk.Label(App,text=self.note, font=("華爲楷體", 18),wraplength=800,justify="left",anchor='center')
        t2.pack()

        #圖片
        global img1
        img1 = self.tkImg(self.pic_url)
        lImg = tk.Label(App,image=img1 ,anchor='center',bg='black')
        lImg.pack()

        #按鈕
        btn = tk.Button(App,text='朗讀', command=self.playSound)
        btn.pack()

if __name__ == "__main__":
    DailyEnglish()

核心代碼並不多,大家也可以嘗試下,或者提出不同的看法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章