欢迎光临散文网 会员登陆 & 注册

傻瓜读书软件完成版TK代码(功能满足,但不完美)

2020-03-30 17:44 作者:一心想当网红的李老师  | 我要投稿

# -*- coding: utf-8 -*-

"""

Created on Sun Mar 29 11:01:21 2020


@author: liyan

"""

import importlib,sys

importlib.reload(sys)


import tkinter

from tkinter.filedialog import askopenfilename

from docx import Document

from docx.shared import Inches

import pyttsx3

from tkinter import *

from tkinter import ttk

import os

import pyaudio

import time

import threading

import wave



class Recorder():

    def __init__(self, chunk=1024, channels=1, rate=64000):

        self.CHUNK = chunk

        self.FORMAT = pyaudio.paInt16

        self.CHANNELS = channels

        self.RATE = rate

        self._running = True

        self._frames = []

    def start(self):

        threading._start_new_thread(self.__recording, ())

    def __recording(self):

        self._running = True

        self._frames = []

        p = pyaudio.PyAudio()

        stream = p.open(format=self.FORMAT,

                        channels=self.CHANNELS,

                        rate=self.RATE,

                        input=True,

                        frames_per_buffer=self.CHUNK)

        while(self._running):

            data = stream.read(self.CHUNK)

            self._frames.append(data)

 

        stream.stop_stream()

        stream.close()

        p.terminate()

 

    def stop(self):

        self._running = False

 

    def save(self, filename):

        

        p = pyaudio.PyAudio()

        if not filename.endswith(".wav"):

            filename = filename + ".wav"

        wf = wave.open(filename, 'wb')

        wf.setnchannels(self.CHANNELS)

        wf.setsampwidth(p.get_sample_size(self.FORMAT))

        wf.setframerate(self.RATE)

        wf.writeframes(b''.join(self._frames))

        wf.close()

        print("Saved")



l=[]

def openfile():

    global file_path,l

    file_path=askopenfilename()  

    

    if os.path.splitext(str(file_path))[1]=='.txt':  ###对于TXT文件的处理

        f=open(file_path,encoding='utf-8')

        fread=f.read()

        f=str(fread)

        text.insert(END,f)   

    elif os.path.splitext(str(file_path))[1]=='.docx': ###对于WORD文件处理

        f=Document(file_path)

        for para in f.paragraphs:

            l.append(para.text)

        text.insert(END,str(l))


def cleartext():

    text.delete('1.0','end')



def readbook():

    global l

    l=text.get('0.0', 'end')

    engine=pyttsx3.init()

    engine.say(str(l))

    engine.runAndWait()

    

    

    

def readtext():

    global l,rec

    l=text.get('0.0', 'end')

    strtime=time.strftime("%Y%m%d%H%M%S", time.localtime())

    name=strtime+".wav"

    rec = Recorder()

    begin = time.time()

    rec.start()

    print("Start recording")

    engine=pyttsx3.init()

    engine.say(str(l))

    engine.runAndWait()

    print("Stop recording")

    rec.stop()

    fina = time.time()

    rec.save(name)


if __name__=='__main__':

    root=Tk()

    root.title('读书软件')

    root.geometry("720x480")

    root.configure(bg="white")

    text=tkinter.Text(root,bg="yellow")

    text.grid(row=2,columnspan=4,padx=20,pady=20) 

    Button1=tkinter.Button(root, text ="选择文件", command = openfile)

    Button1.grid(row=0,column=0,padx=20,pady=20)

    Button2=tkinter.Button(root, text ="清空内容", command = cleartext)

    Button2.grid(row=0,column=1,padx=20,pady=20)

    Button3=tkinter.Button(root, text ="语音读书", command = readbook)

    Button3.grid(row=0,column=2,padx=20,pady=20)

    Button4=tkinter.Button(root, text ="录音输出", command = readtext)

    Button4.grid(row=0,column=3,padx=20,pady=20)

    root.mainloop()


傻瓜读书软件完成版TK代码(功能满足,但不完美)的评论 (共 条)

分享到微博请遵守国家法律