一、準備:
安裝以下庫:
- Tkinter
- requests
- pillow
- playsound
- pyinstaller
二、步驟分析:
-
找到一個合適的接口,獲取推送每日英語的數據。
作者在網上看了一些API,沒有比較合適的,就自己找了個接口,金山詞典的每日一句:
點我點我^v^: 傳送門看起來很舒服的,省去了不少麻煩,進入傳送門就是我們需要的數據,每次請求數據的時候只用改下日期就可以了
-
接下來的任務就是,利用Tkinter擼個簡單界面出來。通過請求返回的數據可以添加文字和美圖和語音
-
項目打包,這裏我們選擇pyinstaller來進行打包成exe可執行程序。
pyinstaller -F -w -i [你的icon圖片路徑] [python源文件路徑]
三、難點解決
- 安裝pyinstall時,可能會報錯,缺少一些東西。可以先安裝 pywin32和wheel在試一下
- 圖片和音頻是給我們的url,如何應用?
請求圖片url,用io.BytesIO 在內容中讀寫bytes,用Image.open打開,通過ImageTk來實現
音頻URL,這裏推薦使用 playsound(url)就可以了
- 打包的時候,不通過,檢查下你的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()
核心代碼並不多,大家也可以嘗試下,或者提出不同的看法。