| 16 | |
| 17 | |
| 18 | class AxWidget(QWidget): |
| 19 | |
| 20 | def __init__(self, *args, **kwargs): |
| 21 | super(AxWidget, self).__init__(*args, **kwargs) |
| 22 | self.resize(800, 600) |
| 23 | layout = QVBoxLayout(self) |
| 24 | self.axWidget = QAxWidget(self) |
| 25 | layout.addWidget(self.axWidget) |
| 26 | layout.addWidget(QPushButton('选择excel,word,pdf文件', |
| 27 | self, clicked=self.onOpenFile)) |
| 28 | |
| 29 | def onOpenFile(self): |
| 30 | path, _ = QFileDialog.getOpenFileName( |
| 31 | self, '请选择文件', '', 'excel(*.xlsx *.xls);;word(*.docx *.doc);;pdf(*.pdf)') |
| 32 | if not path: |
| 33 | return |
| 34 | if _.find('*.doc'): |
| 35 | return self.openOffice(path, 'Word.Application') |
| 36 | if _.find('*.xls'): |
| 37 | return self.openOffice(path, 'Excel.Application') |
| 38 | if _.find('*.pdf'): |
| 39 | return self.openPdf(path) |
| 40 | |
| 41 | def openOffice(self, path, app): |
| 42 | self.axWidget.clear() |
| 43 | if not self.axWidget.setControl(app): |
| 44 | return QMessageBox.critical(self, '错误', '没有安装 %s' % app) |
| 45 | self.axWidget.dynamicCall( |
| 46 | 'SetVisible (bool Visible)', 'false') # 不显示窗体 |
| 47 | self.axWidget.setProperty('DisplayAlerts', False) |
| 48 | self.axWidget.setControl(path) |
| 49 | |
| 50 | def openPdf(self, path): |
| 51 | self.axWidget.clear() |
| 52 | if not self.axWidget.setControl('Adobe PDF Reader'): |
| 53 | return QMessageBox.critical(self, '错误', '没有安装 Adobe PDF Reader') |
| 54 | self.axWidget.dynamicCall('LoadFile(const QString&)', path) |
| 55 | |
| 56 | def closeEvent(self, event): |
| 57 | self.axWidget.close() |
| 58 | self.axWidget.clear() |
| 59 | self.layout().removeWidget(self.axWidget) |
| 60 | del self.axWidget |
| 61 | super(AxWidget, self).closeEvent(event) |
| 62 | |
| 63 | |
| 64 | if __name__ == '__main__': |