用python写一个程序,然后在命令行执行,看不到界面(UI)。这种程序很常见,被称为命令行程序。但是很多人,尤其是不懂程序的人,需要看一个界面可以用鼠标操作的程序。毕竟已经进入“windows”时代了,虽然Dos还是存在的。那么,如何用python制作一个有界面的程序呢?界面也是一种工具,那么,有界面工具库吗?肯定有,而且还有很多,搜索“python接口库”可以看到很多这方面的介绍,而我要介绍的是python中最早的tkinter,通过它可以实现接口程序。Tkinter是用python构建的,所以你不需要安装它,只需导入它并使用它。继上一节介绍的文字转语音程序,现在想写一个界面程序,上面有两个按钮,一个用来选择文本文件,一个是“转语音”。让我们看看如何实现它。(1)TTSGUI程序fromtkinterimport*importtkinter.messageboxasmsgboximporttkinter.filedialogasfiledlgimportosimportpyttsx3frompydubimportAudioSegmentimportthreadingtxtfile=""window=Tk()pathlabel=Label(window,text="...")deffileFunc():default_dir="FilePath"globaltxtfileglobalpathlabeltxtfile=filedlg.askopenfilename(title="SelectFile",initialdir=(os.path.expanduser(default_dir)))(path,fname)=os.path。split(txtfile)pathlabel["text"]=fnamedefconvertThreadFunc(content):outfile="out.aiff"tts=pyttsx3.init()tts.save_to_file(content,outfile)tts.runAndWait()defconvertFunc():如果len(txtfile)==0:msgbox.showinfo("Prompt","Pleaseselectatextfilefirst")returncontent=open(txtfile,"r",encoding="utf-8").read()iflen(content)==0:msgbox.showinfo("提示","文本文件无内容,终止转换,不输出音频文件")returnt1=threading.Thread(target=converThreadFunc,args=(内容,))t1。开始()t1。加入()outfile="out.aiff"AudioSegment.from_file(outfile).export("out.mp3",format="mp3")msg??box.showinfo("Prompt","转换成功,程序目录下的out.mp3为最终语音文件:%s"%os.getcwd())os.system("open'%s'"%os.getcwd())defmain():window.title("TTS-Text-to-Speech“)窗户。geometry("320x320+100+100")filebtn=Button(window,text="选择文本文件",command=fileFunc)convertbtn=Button(window,text="转换为语音",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()focus看at1.使用tkinter控件,messagebox是提示框,filedialog是文件选择控件,Button和Label是常用控件。还有很多关于它们的创建和属性设置的细节。您可以搜索它们。学习。2、这里使用place方法设置控件的位置。类似的方法还有pack、grid等。3.业务逻辑方面,重点是处理两个按钮的点击事件,也就是两个def中的xxFunc函数。4.文字转语音的处理使用上一节介绍的代码,并没有什么神秘之处。5、pyttsx3.engine的函数runAndWait执行完后会结束当前线程。所以这个函数不能在主线程,也就是UI线程上执行,必须要启动一个线程来执行。否则执行runAndWait后主界面会消失。这不是预期的事情。运行后的截图是这样的:程序搞定了,先不管丑不丑,至少功能能用。如果您自己使用,如何快速启用此程序?(2)结合alfred调用程序。在介绍如何在mac系统上快速切换或启动程序之前,用到的工具是alfred,这是一款超级好用的工具。现在再次使用alfred启用您刚刚编写的程序。关于alfred的安装或者使用,网上有很多介绍。我在介绍《mac环境和工具》的时候也介绍过。如果alfred执行python程序,在AudioSegment.form_file时会出现异常,最后无法导出音频文件。即使直接在python代码中执行ffmpeg命令,也会失败。判断是alfred执行python脚本时,AudioSegment(包括它使用的ffmpeg)没有权限访问该文件。考虑到这种情况,需要变通一下:让alfred新开一个终端,让这个终端执行python程序——按照这个思路制作工具。1.在alfred上新建一个“ScriptFilter”:2.新终端会执行cmd.sh脚本,看起来是这样的:cd'/Users/freejet/Library/ApplicationSupport/Alfred3/Alfred.alfredpreferences/workflows/user.workflow.4D91A493-39F3-433C-9D33-65917236A6F5'source~/Desktop/pyenv/bin/activatepython3demo_gui.py首先cd到alfred脚本所在workflow所在的目录。您可以通过右键单击工作流找到此目录路径。然后激活python3环境(第一节介绍的内容),最后执行python程序,也就是上面介绍的“TTSGUI程序”。把这个cmd.sh放在当前工作流目录下,这样alfred就可以找到了。3、执行一下,效果是这样的:最后的out.mp3就是最终想要的文件,可以试听一下(如果你在公众号看过这篇文章):(out.mp3试听)对应的文字是像这样:瑶草-鹤壁,春入武陵溪。溪边桃花无数,花上有莺。欲穿花寻路,直入白云深处,展彩虹磅礴。怕花深里,红露湿衣裳。盘坐玉石,揉玉枕,拂金徽。神仙何在,天人相伴白螺盏。我是灵芝仙草,不是为了红唇红颜,何来常晓之理!醉舞下山,明月一一归来。-歌曲。黄庭坚《水调歌头.游览》你已经开始吐槽了:为什么语音效果这么差!传统的TTS就是这样,听着也不错。如果想要“有情调”的效果,一般需要使用成熟的语音合成接口,或者自己训练一个。不过不管是什么语音效果,这篇文章的目的已经达到了:如何用python写一个程序,然后自己快速调用。那么,再见。
