1. 程式人生 > 實用技巧 >還在用別的小說閱讀器?今天教你用Python製作簡易小說閱讀器!

還在用別的小說閱讀器?今天教你用Python製作簡易小說閱讀器!

本文的文字及圖片來源於網路,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯絡我們以作處理

以下文章來源於騰訊雲 作者:Python進階者

( 想要學習Python?Python學習交流群:1039649593,滿足你的需求,資料都已經上傳群檔案流,可以自行下載!還有海量最新2020python學習資料。 )

/前言/

不知從什麼時候開始。小說開始掀起了一股浪潮,它讓我們平日裡的生活不在枯燥乏味,很多我們做不到的事情在小說裡都能輕易實現。

今天我們要做的就是一個小說閱讀器了,一個可以將你的文章中的字每隔多少秒顯示一次的閱讀器,就好比手機上的定時閱讀一樣,是不是很有趣?那麼下面我們就來具體看看它是如何實現的吧。

/具體實現/

小說閱讀器的話,當然介面是少不了的,下面我們開始編寫介面。

1、首先匯入我們需要用到的包

import time
from tkinter import messagebox
import tkinter as t
from tkinter import ttk
from tkinter import filedialog
from 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("<<ComboboxSelected>>",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庫,編寫了視覺化圖形介面,打造了一款簡易小說閱讀器,實現自定義字元大小的小說閱讀器。今天的分享就到這裡了,歡迎大家嘗試。