首页 > 解决方案 > 按空格键暂停和恢复python中的循环

问题描述

我正在python3中创建一个PDF阅读器应用程序,我想添加一个功能,以在从键盘按下空格键时暂停循环的执行,然后在再次按下空格键时恢复执行。我对如何使用键盘模块感到困惑。非常感谢任何帮助或提示。提前致谢。

# imports
#==========================
from tkinter import * 
import pyttsx3
import PyPDF4
import webbrowser
from tkinter import filedialog as fd 
import keyboard

#==============================================================================================================

class app:
    def __init__(self,window):
        self.window=window
        self.txt_frame=Frame(self.window)
        self.txt_frame.pack()
# add a picture to background of main window
        self.txt = Text(self.txt_frame)
        t = "Welcome to JnanaDhvani!\nOne stop Guide for ultimate reading experience."
        self.txt.insert(END,t)
        self.txt.pack(side=TOP)
        self.pdf = Button(self.txt_frame,text="Open PDF",command=self.callback)
        self.pdf.pack(side=LEFT)
        self.img = Button(self.txt_frame,text="Open image")#,command=click2)
        self.img.pack(side=RIGHT)
        
    def callback(self):
        self.name= fd.askopenfilename(filetypes=(("pdf","*.pdf"),("all","*.*")))
        #print(name)
        self.book =open(self.name,'rb')
        webbrowser.open_new(self.name)
        self.read_window()

        
        # reader window creation function
#================================================================================================================

    def read_window(self):
        self.top=Toplevel(self.window)

        self.top.geometry('550x350')
        self.top.resizable(False,False)
        start =StringVar()
        end =StringVar()
        volume=StringVar()
        speed =StringVar()
        
        #============================================
        
        self.st_label=Label(self.top,text="Enter start page number:")
        self.st_label.grid(row=0,column=0,pady=20,padx=60)
        self.st_pg =Entry(self.top,textvariable=start,justify=RIGHT)
        self.st_pg.grid(row=0,column=1,pady=20,padx=0)
        
        #print(start)
        #===============================================
        
        self.en_label=Label(self.top,text="Enter end page number:")
        self.en_label.grid(row=1,column=0,pady=0,padx=60)
        self.en_pg = Entry(self.top,textvariable=end)
        self.en_pg.grid(row=1,column=1,pady=0,padx=0)
        #print(end)
        
        #================================================
        
        self.vol_label=Label(self.top,text="Enter Volume (0 to 10):")
        self.vol_label.grid(row=2,column=0,pady=50,padx=60)
        self.vol = Entry(self.top,textvariable=volume)
        self.vol.grid(row=2,column=1,pady=50,padx=30)
        #print(volume)
        
        #=================================================
        
        self.sp_label=Label(self.top,text="Enter speed (100 to 250):")
        self.sp_label.grid(row=3,column=0,pady=0,padx=60)
        self.sp = Entry(self.top,textvariable=speed)
        self.sp.grid(row=3,column=1,pady=0,padx=0)
        #print(speed)
        
        #buttons
        #===============================================
        
        setButton= Button(self.top,text="Set Entries",command=self.customize)
        setButton.grid(row=4,column=0,padx=40,pady=50)

        startButton= Button(self.top,text="Start Reading",command=self.scaner)
        startButton.grid(row=4,column=1,padx=40,pady=50)
    
#=================================================================================================================
    
    def customize(self):
        self.reader = pyttsx3.init('espeak')
        self.rate = int(self.sp.get())
        self.reader.setProperty('rate',self.rate)
        self.volm = int(str(self.vol.get()))
        self.reader.setProperty('volume',self.volm/10)
        voices = engine.getProperty('voices')
        self.reader.setProperty('voice',voices[11].id)
        
        
#=================================================================================================================
    
    def scaner(self):    
        self.pdfReader = PyPDF4.PdfFileReader(self.book)
        start =int(self.st_pg.get())-1
        end=int(self.en_pg.get())-1
        for i in range(start,end):
            self.page = self.pdfReader.getPage(i)
            text = self.page.extractText()
            #print(text)
            self.reader.say(text)
            #pause on space bar
            # resume on space bar
            self.reader.runAndWait()

            
# add image reader feature
#=================================================================================================================


window = Tk()
app(window)
window.mainloop()
#=================================================================================================================

标签: python

解决方案


推荐阅读