鱼C论坛

 找回密码
 立即注册
查看: 1093|回复: 0

[作品展示] python懒人听书

[复制链接]
发表于 2021-8-12 01:33:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
​
项目名称:懒人听书(基础版)
开发工具:pycharm
项目简介:打开文件选取文本(TXT小说),点击阅读
 

开始编程之前,首先需要明确思路,有了清晰的思路,编程就会相对的比较简单。

程序的编程思路如下:

1,首先需要一个整体的简易框架,创建一个整体的界面

2,为了使界面美观,要修改窗口的大小和位置,设置界面窗口的信息

3,框架完成之后,选择文件和阅读,需要相应的按钮,因而需要在窗口添加相应的控件

4,单纯的有按钮是不行的,还需要将按钮所需要具有的能力赋给按钮,因此需要创建功能函数并关联按钮

下面开始编程:

1,创建一个图形界面   程序窗口

稍微会用pycharm的都知道,程序运行一般都是在一个小黑框运行,但是我们一般开发的话都是在图形界面进行的,可以想象一下,你登录QQ的场景,双击QQ图标,跳出来的登录界面就是图形界面的一种。

使用图形界面的话,首先要在程序中引入python的一个tkinter库,这个库的作用就是用来创建图形界面的。

具体的引用为(名字有点长,所以将其定义为tk):
import tkinter as tk   # 用于创建图形界面程序的库

 首先使用tk(tkinter,下文均简称为tk)中对应的Tk方法,这个方法是专门用来创建图形界面窗口的,定义好之后,我们给他起个名字叫window。
# 1,创建一个图形界面窗口     程序窗口
window = tk.Tk()      # 创建窗口

在这之后,我们添加“window.mainloop”代码,运行程序来显示结果(建议每一步都做完之后看看结果是否有改变,都有什么样的改变)。可以发现有了一个空白的窗口框,图形窗口就创建好了。

2,设置图形界面窗口的信息

第一步创建好之后,我们会发现,图形界面的名字就叫做tk,相较有点难看,我们首先给它个名字。创建标题有个简单的方法叫title,可以直接使用。
# 2,设置图形界面窗口的信息
window.title('懒人听书')    # 设置窗口名字

名字修改好之后,我们会发现,图形界面的大小不怎么好看,我们为了追求更好看一点,对他的大小进行一定的调整。实现自定义的窗口的大小和位置我们一般用geometry方法进行修改(这里面有个注意点,我一开始也搞错了)。
window.geometry('640x480')   # 设置窗口的大小 geometry中乘号用小写的x表示

 3,创建相应的控件    文本框和按钮

第二步完成之后显示结果,发现只是一个空白的框,什么都没有,而我们需要导入文件和点击阅读,所以需要添加相应的按钮,有的时候可能还想边看边听,这个时候就需要向图形界面添加合适的文本框。

文本框的创建需要调用tk的一个Text方法创建,创建完毕之后,我们将它定义为text。
# 3,在窗口添加相应的控件
text = tk.Text(window)     # 创建文本框

创建之后运行,我们会发现,创建前后没有任何的区别,这是因为我们没有给这个文本框设置一个放置我的位置。 调用一个place的方法给文本框选择位置(x,y为对应的位置变量,width和height表示的是文本框的长宽,这个自行调整,自己满意就好)。
text.place(x=10, y=10, width=620, height=400)    # 设置文本框在窗口程序上的位置和大小

这样,文本框就创建好了。

按钮的创建方法需要调用tk的一个Button方法,说明创建的位置和按钮名称,具体如下:
button1 = tk.Button(window, text='选择书籍')   # 设置按钮
button2 = tk.Button(window, text='开始听书')

 就这样,文本框和按钮设置好了。

4,创建功能函数并关联按钮   两个按钮函数

第三步运行之后,我们发现,虽然按钮给它设置好了,但是点击它却没有任何的反应,这是因为我们还没有给它进行功能的赋予,就像送礼物只有个礼物盒一样毫无意义,因此我们需要创建两个功能函数,让按钮的存在变得有意义。

首先,我们先创建一个选择并打开书籍的函数,第一步,我们先定义一个一看就懂的函数名select_file(选择文件),这个函数的功能是把我们选择的小说读取并显示到文本框。对文件进行选择,我们首先要引进一个叫filedialog的库来进行操作。
import tkinter.filedialog as tkf  # 用于选择文件并获取文件的路径

 引用完毕之后,我们调用这个库,使用askopenfilename获取小说文件的路径,然后对其进行读取,并显示在文本框里。这样,选择文件的功能就创建完成了。
4,创建功能函数并关联按钮
# 创建一个选择并打开书籍的函数
def select_file():
    global book_text
    book_text = ''
    path = tkf.askopenfilename()  # 获取文件路径
    with open(path, 'r', encoding='utf-8') as file:  # 打开电子书
        book_text = file.read()  # 读取电子书里的文字
    text.insert('end', book_text)  # 把读取出来的文字显示到文本框中

创建完成之后,我们运行,发现点击按钮还是无法选择,这是因为我们没有把功能和按钮进行结合,因此我们需要对第三步进行添加,添加完成之后就是这样子。
button1 = tk.Button(window, text='选择书籍', command=select_file)   # 设置按钮,并关联功能

 之后,我们再创建一个可以用来阅读的函数,创建之前,我们也需要进行库的引进,这个库可以对文字进行阅读。
import pyttsx3  # 可以把文字转换为声音的库

 库引进完成之后,我们就简单的调用这个库,对我们的文件进行阅读。这样,阅读的功能也创建好了。
# 创建一个可以阅读的函数
def broadcast_text():
    book = pyttsx3.init()   # 创建并初始化一个可以说话的对象
    book.say(book_text)     # 设置说话的内容
    book.runAndWait()       # 开始说话

 之后如图之前一样,对按钮进行功能的赋予,整个过程项目就完成了。
button2 = tk.Button(window, text='开始听书',command=broadcast_text)

 项目运行之后,我们就能得到一个可以听书的程序了。

 项目的完整代码如下:
import pyttsx3  # 可以把文字转换为声音的库
import tkinter as tk   # 用于创建图形界面程序的库
import tkinter.filedialog as tkf  # 用于选择文件并获取文件的路径


# 4,创建功能函数并关联按钮
# 创建一个选择并打开书籍的函数
def select_file():
    global book_text
    book_text = ''
    path = tkf.askopenfilename()  # 获取文件路径
    with open(path, 'r', encoding='utf-8') as file:  # 打开电子书
        book_text = file.read()  # 读取电子书里的文字
    text.insert('end', book_text)  # 把读取出来的文字显示到文本框中

# 创建一个可以阅读的函数
def broadcast_text():
    book = pyttsx3.init()   # 创建并初始化一个可以说话的对象
    book.say(book_text)     # 设置说话的内容
    book.runAndWait()       # 开始说话


# 1,创建一个图形界面窗口     程序窗口
window = tk.Tk()      # 创建窗口

# 2,设置图形界面窗口的信息
window.title('懒人听书')    # 设置窗口名字
window.geometry('640x480')   # 设置窗口的大小 geometry中乘号用小写的x表示

# 3,在窗口添加相应的控件
text = tk.Text(window)     # 创建文本框
text.place(x=10, y=10, width=620, height=400)    # 设置文本框在窗口程序上的位置和大小

button1 = tk.Button(window, text='选择书籍', command=select_file)   # 设置按钮,并关联功能
button1.place(x=100, y=420, width=100, height=50)    # 设置文本框在窗口程序上的位置和大小
button2 = tk.Button(window, text='开始听书',command=broadcast_text)
button2.place(x=400, y=420, width=100, height=50)

window.mainloop()

 

第一次发,有说的不清楚的可以和我留言,或者有大佬可以给我一些指点的,万分感谢。

​
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 15:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表