• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

关于python:python应用2写个python程序给自己用

python 搞代码 3年前 (2022-02-20) 36次浏览 已收录 0个评论

用python写一个程序,而后在命令行上执行,看不到界面(UI),这种程序很常见了,叫命令行程序。然而很多人,特地是不懂程序的人,更须要看到的是一个有界面的,能通过鼠标操作的程序,毕竟曾经迈进“窗口”的时代,尽管Dos还存在。所以,怎么用python弄出有界面的程序呢?

界面也是一个工具,所以,有没有界面工具库呢?必须得有,而且有很多个,你搜寻“python界面库”就能够看到很多这方面的介绍,而我要介绍的,是python最早就有的tkinter,通过它来实现界面程序。

tkinter内置在python中,所以不必再装置,间接import进来应用就是了。沿用上一节介绍的文本转语音的程序,我当初要写一个界面程序,下面有两个按钮,一个用来抉择文本文件,一个是“转换成语音”,来看看怎么实现吧。

(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", encoding="utf-8").read()
    if len(content)==0:
        msgbox.showinfo("提醒", "文本文件没有内容,转换终止,不输入语音文件")
        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("提醒", "转换胜利,程序目录下的out.mp3就是最终的语音文件:%s" % os.getcwd())
    os.system("open '%s'" % os.getcwd())
    
def main():
    window.title("TTS-文本转换语音")
    window.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()

抓重点来看。

1、应用了tkinter的控件,messagebox是提示框,filedialog是文件抉择控件,再比方Button跟Label,这些都是罕用的控件,它们的创立跟属性设置,也有不少详情,你能够搜寻来理解。

2、这里用place办法来设置控件的地位,相似的办法还有pack、grid等。

3、业务逻辑上,重点是解决两个按钮的点击事件,也就是那两个def进去的xxFunc函数了。

4、文本转语音的解决,应用了上节介绍的代码,也没有什么神秘的。

5、pyttsx3.engine的函数runAndWait在执行完后会完结以后线程,所以,不能在主线程即UI线程来执行这个函数,而要启动一个thread来执行它,否则runAndWait执行后主界面就会隐没,这不是预期的事件。

运行起来后的一个截图是这样的:

程序弄好了,先不论它丑不丑吧,至多性能能够用了。如果是本人应用的话,那怎么样能力疾速地启用这个程序呢?

(2)联合alfred来调用程序

之前介绍过怎么在mac零碎上疾速地切换或启动一个程序,应用的工具就是alfred,这是一个超级好用的工具。那当初再次应用alfred来启用方才写的程序。

对于alfred的装置或应用,网上很多介绍,我之前介绍“mac环境与工具”时也有介绍,然而,这里有一个中央要留神:手动用终端执行下面的python程序是能够失常运作的,但一旦通过alfred执行python程序,那在AudioSegment.form_file时就会异样,最终export不出语音文件,就算间接在python代码中执行ffmpeg命令也一样会失败,判断是,alfred执行python脚本的状况下,AudioSegment(包含它应用的ffmpeg)没有权限拜访文件。 思考到这种状况,就要变通一下了:让alfred关上一个新的终端,并且让这个终端执行python程序–按这个思路来制作工具。

1、在alfred上新建一个“Script Filter”:

2、新的terminal会执行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的环境(第一节介绍到的内容),最初执行python程序也就是下面介绍的“TTS的GUI程序”。

把这个cmd.sh放到以后workflow的目录中,这样alfred能力找到它。

3、执行一下,成果是这样的:

最初的那个out.mp3就是最终想要的文件,你能够听一下(如果你是在公众号内看到这篇文章的话):
(out.mp3试听)

对应的文本是这样的:

瑶草一何碧,春入武陵溪。溪上桃花有数,花上有黄鹂,我欲穿花寻路,直入白云深处,浩气展虹霓。只恐花深里,红露湿人衣。坐玉石,欹玉枕,拂金徽。谪仙何处,天人伴我白螺杯。我为灵芝仙草,不为朱唇丹脸,长啸亦何为!醉舞下山去,明月逐人归。——宋.黄庭坚《水调歌头.旅行》

你曾经开始吐槽了吧:这语音成果怎么这么差!

传统的TTS就这样子了,有得听就不错了,如果想要“有感情”的成果那个别要应用成熟的语音合成接口,或者本人训练一个进去。但不论语音成果怎么样,本文的目标曾经达到了:怎么用python写一个程序,而后给本人疾速地调用到。so,see you。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:关于python:python应用2写个python程序给自己用

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址