python - 按空格键暂停和恢复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()
#=================================================================================================================
解决方案
推荐阅读
- flutter - 使用多提供者颤振的本地化显示没有此类方法错误
- java - Hibernate Schema-validation: missing table error,虽然我在数据库中定义了表和模式,就像在java中一样
- jquery - jQuery - 使输入单选的值和选择选项相同
- android - Appcompatx,os 捆绑在 void androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor() (AppCompatDelegateImpl.java:659)
- display - 字母数字显示 - 在内存中的位置
- c++ - 如何在 C++ 中提取树迭代
- c# - 我需要帮助弄清楚这个 oracle db 时间戳
- sql - 基于两个特定日期从单个表中检索数据的 SQL 查询
- apache-spark - 引发流无法写入 hdfs 路径
- c - 在我的 c 代码中删除重复项时出错