QAxWidget 一句话介绍

QAxWidget类是一个包装ActiveX控件的QWidget,它可以组织在一个小部件层次结构和布局中,或者作为一个事件过滤器。

ActiveX控件

ActiveX插件,也叫做OLE控件或OCX控件,它是一些软件组件或对象,可以将其插入到WEB网页或其他应用程序中。

From 请通俗易懂地解释什么是ActiveX控件请解释什么是Active 爱问知识人

参考链接

  • QAxWidget 妙用 - Avatarx - 博客园
  • pyqt5 使用QAxWidget怎么显示Microsoft Word? · Issue #7 · PyQt5/PyQt · GitHub
  • QAxWidget Class | Active Qt 6.3.0
  • QAxWidget Class | Active Qt 5.15.9
  • 如何查看ActiveX控件的UUID?_刘永年-CSDN博客

正文

QAxWidget 从QAxBase继承了大部分与 ActiveX 相关的功能,特别是 dynamicCall() 和 querySubObject()。

下面将使用 setControl() 和 dynamicCall() 打开IE浏览器,浏览百度地图网址。

简单介绍 setControl()

setControl()会初始化ActiveX组件,请结合下方代码阅读。

在PyQt6中,如果之前已经设置了ActiveX组件,resetControl()会将之前的ActiveX组件关闭。

最有效的调用方法:使用已注册组件的 UUID,例如:

setControl("{8E27C92B-1264-101C-8A2F-040224009C02}")

第二快的方法:使用注册控件的类名(带或不带版本号),例如:

setControl("MSCal.Calendar")

最慢但最简单的使用方法:使用控件的全名,例如:

setControl("Calendar Control 9.0")

也可以从文件初始化对象,例如:

setControl("c:/files/file.doc")

From QAxBaseWidget Class | Active Qt 6.3.0

简单介绍 dynamicCall()

调用ActiveX组件的方法,传递参数,并返回ActiveX组件的返回值。

如果调用ActiveX组件的方法失败,或者ActiveX组件没有返回值,则返回无效的QVariant。

调用ActiveX组件的方法,需要说明参数类型,例如:dynamicCall(方法名(参数类型), 参数值)

dynamicCall("Navigate(const QString&)", "www.qt-project.org")

或者可以调用一个函数,直接传递参数,例如:dynamicCall(方法名(参数值))

dynamicCall("Navigate(\"www.qt-project.org\")")

From QAxBase Class | Active Qt 6.3.0

示例一:直接继承QAxWidget窗口,调用IE

PyQt6 > QAxContainer > QAxWidget

import sys
from PyQt6.QAxContainer import QAxWidget
from PyQt6.QtWidgets import QApplicationclass Window(QAxWidget):def __init__(self, *args, **kwargs):super(Window, self).__init__(*args, **kwargs)self.setFixedSize(900, 600)self.setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}")self.dynamicCall("Navigate(const QString&)", "https://map.baidu.com/@13523265.31,3641114.64,12z")if __name__ == '__main__':app = QApplication(sys.argv)w = Window()w.show()sys.exit(app.exec())

示例二:在QWidget窗口中,加入QAxWidget控件,调用IE

import sys
from PyQt6.QAxContainer import QAxWidget
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QApplication
from PyQt6.QtCore import Qtclass Window(QWidget):def __init__(self, *args, **kwargs):super(Window, self).__init__(*args, **kwargs)self.setFixedSize(900, 600)layout = QVBoxLayout(self)self.axWidget = QAxWidget("ObjectName", self)layout.addWidget(self.axWidget)self.axWidget.setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}")self.axWidget.setFocusPolicy(Qt.FocusPolicy.StrongFocus)self.axWidget.setProperty("DisplayAlerts", False)self.axWidget.setProperty("DisplayScrollBars", True)self.axWidget.dynamicCall("Navigate(const QString&)", "https://map.baidu.com/@13523265.31,3641114.64,12z")if __name__ == '__main__':app = QApplication(sys.argv)w = Window()w.show()sys.exit(app.exec())

示例三:打开Word

import sys
from PyQt6.QAxContainer import QAxWidget
from PyQt6.QtWidgets import QWidget, QVBoxLayout, QApplication, QPushButton, QFileDialog
from PyQt6.QtCore import Qtclass Window(QWidget):def __init__(self, *args, **kwargs):super(Window, self).__init__(*args, **kwargs)self.setFixedSize(900, 600)layout = QVBoxLayout(self)self.axWidget = QAxWidget("ObjectName", self)layout.addWidget(self.axWidget)layout.addWidget(QPushButton('打开word', self, clicked=self.onOpenWord))self.axWidget.setControl("{8856F961-340A-11D0-A96B-00C04FD705A2}")self.axWidget.setFocusPolicy(Qt.FocusPolicy.StrongFocus)self.axWidget.setProperty("DisplayAlerts", False)self.axWidget.setProperty("DisplayScrollBars", True)self.axWidget.dynamicCall("Navigate(const QString&)", "https://map.baidu.com/@13523265.31,3641114.64,12z")def onOpenWord(self):path, _ = QFileDialog.getOpenFileName(self, '请选择Word文件', '', 'word(*.docx *.doc)')if not path:return# 不显示窗体self.axWidget.resetControl()self.axWidget.setControl(path)self.axWidget.dynamicCall('SetVisible (bool Visible)', 'false')self.axWidget.setProperty('DisplayAlerts', False)if __name__ == '__main__':app = QApplication(sys.argv)w = Window()w.show()sys.exit(app.exec())

PyQt6 使用 QAxWidget 打开 IE/Word相关推荐

  1. QAxWidget 打开word、pdf、excel、ppt

    QAxWidget 打开word.pdf.excel.ppt 使用QAxWidget打开word,pdf,excel,其中word高亮关键字. 打开txt并高亮关键字见另一文.添加链接描述 PPT操作 ...

  2. Qt显示pdf系列2——QAxWidget打开Office文件及pdf

    序 一QAxwidget操作office 二QAxwidget操作pdf 三总结  承接上章,该扯皮的扯完了,直接进入正题: 序  顾名思义,这篇先介绍下QAxwidget来操作office和pdf ...

  3. 苹果笔记本恢复服务器上的安装信息已被破坏,Mac电脑如何恢复删除或已损坏无法打开的Word文件?...

    Haley 于 2021/08/05更新 Mac数据恢复 摘要 当Mac上的Word文件被删除.丢失或损毁,您会收到错误提示如下「此文档已被删除或当前无法访问」.想要解决这个问题,可以使用专业的Mac ...

  4. 安卓-使用腾讯TBS浏览服务(X5WebView) - 打开打开PDF,WORD,EXCLE等文件

    Tbs是 官方的接入文档有点坑 ,也在网上找了好几个博客 内容都是一样的 这里我总结下Tbs的使用 和 踩到的坑吧 1.引入SDK, 有两种方式 去官网下载它的SDK :https://x5.tenc ...

  5. VB打开指定Word文档

    1.在VB的"工程"->"引用"中引用"Microsoft Word 9.0 Object Library Private Sub Comman ...

  6. 都什么年代了,打开个Word文档还能中毒!Locky病毒疯狂传播

    本文讲的是 都什么年代了,打开个Word文档还能中毒!Locky病毒疯狂传播,如果你收到的邮件假扮成某公司的发票单,包含 Word 附件,在打开它之前应当三思而后行. 如果打开,可能会使你的系统瘫痪, ...

  7. 排查在win10下面打开某些word文档“提示内存或磁盘空间不足”的原因

    排查在win10下面打开某些word文档"提示内存或磁盘空间不足"的原因 编者:李国帅 qq:9611153 微信lgs9611153 时间:2020-03-11 背景原因 在wi ...

  8. 如何判断当前打开的WORD或WPS文件已经关闭?

    在大多数应用中都要知道从页面打开的Word或WPS文件是否已经关闭,通常的方法有以下几种: 方法一:   由于当前打开的文件是独占模式打开的,所以可以使用移动文件的方法进行判断,如:   将文件从当前 ...

  9. 猿大师办公助手已经在Chrome中打开了Office Word,再用桌面Office打开其他Word打不开怎么办?

    问: 我们发现用猿大师办公助手在Chrome网页中已经打开了Word文档,但是再用本地的Word打开其他文档,却直接显示在网页中了,本地打不开Word怎么办? 答: 猿大师办公助手默认新打开文件是在内 ...

  10. js在PageOffice打开的Word文档光标处插入书签

    在使用Word时,如果内容过多有时为了快速定位到内容的某一处或某一部分怎会在该处添加书签.Word中的书签可以通过工具栏手动添加或删除,也可以通过后台程序结合JS函数在当前光标处插入书签,或根据书签名 ...

最新文章

  1. 一人一天发两篇Science,视频揭秘:植物如何在与病菌的斗争中取胜?
  2. python面向对象总结_python面向对象总结
  3. 微软Azure AI负责人:OpenAI只能在微软云上训练模型,不懂中台
  4. C#异常解决:在调用OLE之前,必须将当前线程设置为单线程单单元(STA)模式。
  5. springboot实践1
  6. linux查找文件名赋值给变量,Linux平台从文件中查找字符赋值于变量
  7. 腾讯地图api-地图展示map和覆盖物(标记)
  8. HDU2189 来生一起走【完全背包】
  9. scala 与 spark 并行化
  10. Makefile编写练习题
  11. php接受fromdata,php接收form-data形式的多文件的问题
  12. 笔记系列------sqlloader的使用
  13. 一款超好用的PDF阅读器:智器阅读
  14. eyoucms相关问题总结
  15. Android:系统日历同步日程
  16. 利用差分求非齐次多项式的通项公式
  17. 人体反应测试仪 c语言,人体反应速度测试仪.doc
  18. 项目之动态图片的制作
  19. IDEA中写代码间距变大报红,报错Cannot resolve symbol
  20. php redis 详细操作

热门文章

  1. Windows小技巧 -- 已连接wifi密码查看
  2. 马步站桩22个要领的几个关键问题解释
  3. 没人教的项目管理方法之(练好你的站桩) 一、 干系人分析应该怎么做
  4. python项目打包部署到ios_Python实现iOS自动化打包详解
  5. 小感之绝知此事要躬行
  6. 阿里云文本反垃圾检测接口调用
  7. 解决CMU-15-213-ICS的部分lab在部分64位系统WSL中btest无法运行的问题
  8. Android 自定义标题栏
  9. Python——简化表达
  10. java数学运算(Math类)