【发布时间】:2019-04-21 03:02:37
【问题描述】:
我在这里有一个简单的 PyQt5 应用程序,可以将 Pdf 转换为 excel。我想在下面的方法 convert 中添加一个进度条,当我单击按钮进行转换时,因为它需要一些时间来执行,因此有一些可视化效果会很棒。
下面是我的代码:
我正在从 Qtdesigner 加载用户界面。我也可以在可以附加到 pushButton_3 的某处添加进度条。进度条可以称为 'ProgressBar' 。请让我知道您如何完成它,因为这里的大多数答案并没有真正回答这个问题。
import sys
from PyQt5.QtWidgets import QMainWindow,QApplication,QTableView, QWidget, QFileDialog,QPushButton,QVBoxLayout,QMessageBox
from PyQt5 import uic
from PyPDF2 import PdfFileReader
from PyQt5 import QtCore,QtGui
import pandas as pd
import tabula
import re
from PandasModel import PandasModel
class App(QMainWindow):
def __init__(self):
QWidget.__init__(self)
uic.loadUi('designUI.ui',self)
self.pushButton.clicked.connect(self.openFileNameDialog)
self.pushButton_3.clicked.connect(self.convert)
self.pushButton_2.clicked.connect(self.view)
self.pushButton_4.clicked.connect(self.saveFileDialog)
def openFileNameDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getOpenFileName(self,"Open File", "","All Files (*);;Python Files (*.py)")#, options=options)
if fileName:
self.file=fileName
def view(self):
model=PandasModel(self.converted_file)
self.tableView.setModel(model)
def convert(self):
self.converted_file=self.pdf2excel(self.file)
def saveFileDialog(self):
options = QFileDialog.Options()
options |= QFileDialog.DontUseNativeDialog
fileName, _ = QFileDialog.getSaveFileName(self, 'Save File', '', ".xls(*.xls)")
if fileName:
self.converted_file.to_excel(fileName)
msg=QMessageBox()
msg.setText('File is Saved')
msg.setStandardButtons(QMessageBox.Ok)
#msg.buttonClicked.connect(msgbtn)
msg.exec_()
def pdf2excel(self,pdf_file):
pdf = PdfFileReader(open(pdf_file,'rb'))
length=pdf.getNumPages()
result=pd.DataFrame(columns=['Department','Employment No','Employment Name',"Hire Date","Term Date","Birth Date",
"Seniority Date","Pay Code","FT/PT/S","Status"])
page=1
while page <= length:
df=tabula.read_pdf(pdf_file, pages = str(page),lattice =True, area=(75.775,16.0,572.715,779.29))[1:]
pattern = re.compile(r'(\s){2,}')
df=pd.DataFrame(df[df.columns[0]].replace(pattern,","))
df=df['Unnamed: 0'].str.split(",",expand=True)
df=df.rename(columns={0:'Department',
1:'Employment No',2:'Employment Name',3:"Hire Date",4:"Term Date",5:"Birth Date",
6:"Seniority Date",7:"Pay Code",8:"FT/PT/S",9:"Status"})
result=result.append(df,ignore_index=True)
page+=1
result["Hire Date"]=pd.to_datetime(result["Hire Date"])
result["Term Date"]=pd.to_datetime(result["Term Date"])
result["Days Difference"]=(result['Term Date']-result['Hire Date']).dt.days
result=result.dropna(how='all')
result=result.drop(columns=['Birth Date','Pay Code','Status'])
result=result[['Department','Employment No','Employment Name',"Hire Date","Term Date","Days Difference",
"Seniority Date","FT/PT/S"]]
return result
if __name__ == '__main__':
app = QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('pdf-to-excel-icon.png'))
ex = App()
ex.show()
sys.exit(app.exec_())
【问题讨论】:
标签: python pyqt pyqt5 qprogressbar