溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么寫個python程序給自己用

發(fā)布時間:2021-11-26 11:48:08 來源:億速云 閱讀:182 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“怎么寫個python程序給自己用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么寫個python程序給自己用”吧!

界面也是一個工具,所以,有沒有界面工具庫呢?必須得有,而且有很多個,你搜索“python界面庫”就可以看到很多這方面的介紹,而我要介紹的,是python最早就有的tkinter,通過它來實現(xiàn)界面程序。

tkinter內(nèi)置在python中,所以不用再安裝,直接import進(jìn)來使用就是了。

(1)TTS的GUI程序

from tkinter import *
import tkinter.messagebox as msgbox
import tkinter.filedialog as filedlg
import os
import pyttsx3
from pydub import AudioSegment
import threading

txtfile = ""
window = Tk()
pathlabel = Label(window, text="...")

def fileFunc():
   default_dir = "文件路徑"
   global txtfile
   global pathlabel
   txtfile = filedlg.askopenfilename(title="選擇文件", initialdir=(os.path.expanduser(default_dir)))
   (path, fname) = os.path.split(txtfile)
   pathlabel["text"] = fname

def converThreadFunc(content):
   outfile = "out.aiff"
   tts = pyttsx3.init()
   tts.save_to_file(content, outfile)
   tts.runAndWait()

def convertFunc():
   if len(txtfile) == 0:
       msgbox.showinfo("提示", "請先選擇文本文件")
       return
   content = open(txtfile, "r").read()
   if len(content)==0:
       msgbox.showinfo("提示", "文本文件沒有內(nèi)容,轉(zhuǎn)換終止,不輸出語音文件")
       return
   t1 = threading.Thread(target=converThreadFunc, args=(content,))
   t1.start()
   t1.join()
   outfile = "out.aiff"
   AudioSegment.from_file(outfile).export("out.mp3", format="mp3")
   msgbox.showinfo("提示", "轉(zhuǎn)換成功,程序目錄下的out.mp3就是最終的語音文件:%s" % os.getcwd())
   os.system("open '%s'" % os.getcwd())

def main():
   window.title("TTS-文本轉(zhuǎn)換語音")
   window.geometry("320x320+100+100")
   filebtn = Button(window, text="選擇文本文件", command=fileFunc)
   convertbtn = Button(window, text="轉(zhuǎn)換成語音", command=convertFunc)
   filebtn.place(x=10, y=10)
   pathlabel.place(x=10, y=40)
   convertbtn.place(x=10, y=80)
   window.mainloop()

if __name__=="__main__":
   main()

抓重點(diǎn)來看。

1、使用了tkinter的控件,messagebox是提示框,filedialog是文件選擇控件,再比如Button跟Label,這些都是常用的控件,它們的創(chuàng)建跟屬性設(shè)置,也有不少詳情,你可以搜索來了解。

2、這里用place方法來設(shè)置控件的位置,類似的方法還有pack、grid等。

3、業(yè)務(wù)邏輯上,重點(diǎn)是處理兩個按鈕的點(diǎn)擊事件,也就是那兩個def出來的xxFunc函數(shù)了。

4、文本轉(zhuǎn)語音的處理,使用了上節(jié)介紹的代碼,也沒有什么神秘的。

5、pyttsx3.engine的函數(shù)runAndWait在執(zhí)行完后會結(jié)束當(dāng)前線程,所以,不能在主線程即UI線程來執(zhí)行這個函數(shù),而要啟動一個thread來執(zhí)行它,否則runAndWait執(zhí)行后主界面就會消失,這不是預(yù)期的事情。

運(yùn)行起來后的一個截圖是這樣的: 怎么寫個python程序給自己用

程序弄好了,先不管它丑不丑吧,至少功能可以用了。如果是自己使用的話,那怎么樣才能快速地啟用這個程序呢?

(2)結(jié)合alfred來調(diào)用程序

之前介紹過怎么在mac系統(tǒng)上快速地切換或啟動一個程序,使用的工具就是alfred,這是一個超級好用的工具。那現(xiàn)在再次使用alfred來啟用剛才寫的程序。

關(guān)于alfred的安裝或使用,網(wǎng)上很多介紹,我之前介紹“mac環(huán)境與工具”時也有介紹,但是,這里有一個地方要注意:手動用終端執(zhí)行上面的python程序是可以正常運(yùn)作的,但一旦通過alfred執(zhí)行python程序,那在AudioSegment.form_file時就會異常,最終export不出語音文件,就算直接在python代碼中執(zhí)行ffmpeg命令也一樣會失敗,判斷是,alfred執(zhí)行python腳本的情況下,AudioSegment(包括它使用的ffmpeg)沒有權(quán)限訪問文件。 考慮到這種情況,就要變通一下了:讓alfred打開一個新的終端,并且讓這個終端執(zhí)行python程序--按這個思路來制作工具。

1、在alfred上新建一個“Script Filter”: 怎么寫個python程序給自己用

2、新的terminal會執(zhí)行cmd.sh腳本,這個腳本是這樣的:

cd '/Users/freejet/Library/Application Support/Alfred 3/Alfred.alfredpreferences/workflows/user.workflow.4D91A493-39F3-433C-9D33-65917236A6F5'
source ~/Desktop/pyenv/bin/activate
python3 demo_gui.py

先是cd到這個alfred腳本即workflow所在的目錄,這個目錄路徑你可以通過右鍵workflow找到,然后激活python3的環(huán)境(第一節(jié)介紹到的內(nèi)容),最后執(zhí)行python程序也就是上面介紹的“TTS的GUI程序”。

把這個cmd.sh放到當(dāng)前workflow的目錄中,這樣alfred才能找到它。

3、執(zhí)行一下,效果是這樣的: 怎么寫個python程序給自己用

最后的那個out.mp3就是最終想要的文件

對應(yīng)的文本是這樣的:

瑤草一何碧,春入武陵溪。溪上桃花無數(shù),花上有黃鸝,我欲穿花尋路,直入白云深處,浩氣展虹霓。只恐花深里,紅露濕人衣。坐玉石,欹玉枕,拂金徽。謫仙何處,天人伴我白螺杯。我為靈芝仙草,不為朱唇丹臉,長嘯亦何為!醉舞下山去,明月逐人歸。——宋.黃庭堅《水調(diào)歌頭.游覽》

到此,相信大家對“怎么寫個python程序給自己用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI