社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

手把手教你用Python制作简易小说阅读器

编程派 • 4 年前 • 493 次点击  
点击上方“编程派”,选择设为“设为星标

优质文章,第一时间送达!

沉吟放拨插弦中,整顿衣裳起敛容。

/前言/

    不知从什么时候开始。小说开始掀起了一股浪潮,它让我们平日里的生活不在枯燥乏味,很多我们做不到的事情在小说里都能轻易实现。

    今天我们要做的就是一个小说阅读器了,一个可以将你的文章中的字每隔多少秒显示一次的阅读器,就好比手机上的定时阅读一样,是不是很有趣?那么下面我们就来具体看看它是如何实现的吧。


/具体实现/

小说阅读器的话,当然界面是少不了的,下面我们开始编写界面。

1、首先导入我们需要用到的包

import timefrom tkinter import messageboximport tkinter as tfrom tkinter import ttkfrom tkinter import filedialogfrom tkinter import simpledialog

2、编写主界面

class gui:def __init__(self):self.root=t.Tk()self.root.title('小说阅读器V1.0')  #窗口名称self.root.geometry("700x700")  #设置窗口大小self.root.wm_attributes('-topmost',1) #窗口置顶self.root.wm_minsize(140, 170)                  # 设置窗口最小化大小self.root.wm_maxsize(1440, 2800)             # 设置窗口最大化大小self.root.resizable(width=False, height=True)     # 设置窗口宽度不可变,高度可变self.te=t.Text(self.root,width=60,height=40) #多行文本框self.b1= t.Button(self.root, text='打开文件',font =("宋体",10,'bold'),command=self.open_file)self.cb=ttk.Combobox(self.root, width=12) #下拉列表框self.b2=t.Button(self.root,text='清空内容',command=self.clean) #按钮self.l1=t.Label(self.root,text='请选择阅读速度:') #标签self.cb['values'] = ('请选择-----','全部读取','一秒一行','两秒一行','自定义') #设置下拉列表框的内容   self.cb.current(0)    #将当前选择状态置为0,也就是第一项self.cb.bind("<>",self.go)  #绑定go函数,然后触发事件self.b1.place(x=30,y=30)self.b2.place(x=360,y=26)self.l1.place(x=130,y=30)self.te.place(x=30,y=60)


    
self.cb.place(x=230,y=30)self.root.mainloop()

3、编写打开文件对话框的代码

def open_file(self):self.file=filedialog.askopenfilename(title='打开文件', filetypes=[('文本文件', '*.txt'), ('All Files', '*')])return self.file

这样就打开了以文本文件为首的文件。

4、选择打开的文件进行读取

self.ff=open(self.file,'r', encoding='utf8')aa=self.ff.read()

5、将文件中的内容的所有空格换行去掉

self.ab=aa.replace('\n','').replace('\t','').strip()

6、实现下拉列表中每个选项的功能

if self.cb.get()=='请选择-----':            pass        elif self.cb.get()=='全部读取':if self.ab:self.te.insert('insert',self.ab) #插入内容self.te.update()  #更新内容else:self.ff.close()        elif self.cb.get()=='一秒一行':for y in range(len(self.ab)): #遍历文件内容if self.ab:self.te.insert('insert',self.ab[y]) #插入内容if y%10==0 and y!=0:#判断如果读取到十个字的长度则插入文本内容到文本框并换行self.te.insert('insert','\n') #插入换行self.te.update()        #更新内容else:                        time.sleep(0.1) #每隔0.1秒显示一个,一行十个字,就能达到一秒出一行else:self.ff.close() #关闭文件        elif self.cb.get()=='两秒一行':for y in range(len(self.ab)):if self.ab:self.te.insert('insert',self.ab[y])if y%10==0 and y!=0:self.te.insert('insert','\n')self.te.update()else:                        time.sleep(0.2)else:self.ff.close()        elif self.cb.get()=='自定义':            res=simpledialog.askinteger(title='请输入',prompt='几秒读取一行:',initialvalue= '')for y in range(len(self.ab)):if self.ab:self.te.insert('insert',self.ab[y])if y%10==0 and y!=0:self.te.insert('insert','\n')self.te.update()else:                        time.sleep(res/10)
else:self.ff.close()

这样就实现了每隔一秒每十个字节输出一行,当然你也可以一个字一个字让它输出,如果是这样,只需将下面的代码:

for y in range(len(self.ab)): #遍历文件内容if self.ab:self.te.insert('insert',self.ab[y]) #插入内容if y%10==0 and y!=0: #判断如果读取到十个字节长度则插入文本内容到文本框self.te.insert('insert','\n')self.te.update()        #更新内容else:                        time.sleep(0.1)

改为:

for y in range(len(self.ab)): #遍历文件内容if self.ab:


    

if y % 10==0 and y!=0: #判断如果读取到十个字节长度则插入文本内容到文本框self.te.insert('insert','\n')else:self.te.insert('insert',self.ab[y]) #插入内容self.te.update() #更新内容 time.sleep(0.1)

8、清空内容

def clean(self):self.te.delete('1.0', t.END) #删除文本框所有内容

这样就可以实现了。

下面我们来看下具体效果吧:

这样我们就轻松实现了一个小说阅读器,顺带提一下,你想一行多显示几个字符,只需要修改下面这行的数字即可:

if y % 10==0 and y!=0:

把10改为其他数字,他就会显示相应长度的字符了。


/小结/

1、本文基于Python库,编写了可视化图形界面,打造了一款简易小说阅读器,实现自定义字符大小的小说阅读器。今天的分享就到这里了,欢迎大家尝试。

文末福利

考拉收集了 21 张 Python 代码速查表,每一张都是国外的大师总结的,非常实用 ~


还有 2 张高清的 PyCharm 快捷键一览图,一张 Windows ,一张 Mac,放在桌面上,需要的时候打开一查,非常方便。。



怎么获取呢?


关注编程派公众号,回复关键词「f」获取

题图:pexels,CC0 授权

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/99676
 
493 次点击