如何使用 Internet Explorer 控件在 Python 中创建 HTML-dialog window?
How to create a HTML-dialog window in Python with Internet Explorer control?
我需要创建一个对话框来显示 HTML 页面。该应用程序是用 Python 编写的,对话框必须包含 Internet Explorer 控件。 Python 是否支持与 COM/ActiveX 的集成,是否有此类集成的任何工作示例?
如果可能,请提供没有第三方网站链接的答案。
请不要提供 .NET/C++/Chrome 或任何其他组合。 Python+IE是我的要求,不能改
您可以使用 wxWidgets WebView
组件(通过 wxPython)在 Python GUI 应用程序中嵌入 Internet Explorer window。不同于例如Qt 包括跨所有平台的标准化浏览器组件,wxWidgets 默认使用主机平台上的本机浏览器。您还可以通过手动设置后端来强制使用 IE(忽略用户的默认浏览器)。
在文档中它显示 WEBVIEW_BACKEND_IE
,但实际值可通过 wx.html2.WebViewBackendIE
获得。以下是一个完整的工作示例,改编自 here:
import wx
import wx.html2
class MyBrowser(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self, backend=wx.html2.WebViewBackendIE)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((700, 700))
if __name__ == '__main__':
app = wx.App()
dialog = MyBrowser(None, -1)
dialog.browser.LoadURL("https://www.google.com")
dialog.Show()
app.MainLoop()
当然,这只适用于 Windows。有关 wxWidgets 中 WebView 的更多信息,请参阅 documentation.
如果您已经在应用程序中使用 (Py)Qt,Qt 还支持使用 QAxWidget
class 在 windows 中嵌入 ActiveX 对象。 Qt documentation. Below is a minimal PyQt4 example 中有一个网络浏览器示例:
browser = QAxContainer.QAxWidget()
browser.setControl("<ActiveX ID>") # e.g. "{8856F961-340A-11D0-A96B-00C04FD705A2}"
browser.dynamicCall('Navigate(const QString&)', QtCore.QString("google.com"))
从 Python 开始,您可以毫不费力地使用 COM。这是一个简单的例子:
import win32com.client
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate('www.google.com')
您可能只想下载此项目并通读 IEC.py 以获得所有有用的 com 命令(我知道您不是在寻找链接,但在这种情况下,有已经有 500 行代码可以为您节省大量时间,点击按钮、获取文档文本、复选框、提交表单等)http://www.mayukhbose.com/python/IEC/
我认为这会解决您的问题。如果您已经知道所有的 IE com 命令(或者只需在 IPython 中点击 "tab" 以获得列表 In [1]: ie. <tab>
),那么上面的简单示例就足够了。
另请注意,在使用 COM 对象时,通常只需 运行 即可大大加快它们的速度:
from win32com.client import makepy
makepy.main()
然后滚动弹出窗口 window 并找到您的应用程序(Microsoft Internet Controls
for IE)- 所有已注册的 COM 接口都应该在那里,这将自动生成内部方法而不是每次都生成你打电话给图书馆的时间。
我需要创建一个对话框来显示 HTML 页面。该应用程序是用 Python 编写的,对话框必须包含 Internet Explorer 控件。 Python 是否支持与 COM/ActiveX 的集成,是否有此类集成的任何工作示例?
如果可能,请提供没有第三方网站链接的答案。 请不要提供 .NET/C++/Chrome 或任何其他组合。 Python+IE是我的要求,不能改
您可以使用 wxWidgets WebView
组件(通过 wxPython)在 Python GUI 应用程序中嵌入 Internet Explorer window。不同于例如Qt 包括跨所有平台的标准化浏览器组件,wxWidgets 默认使用主机平台上的本机浏览器。您还可以通过手动设置后端来强制使用 IE(忽略用户的默认浏览器)。
在文档中它显示 WEBVIEW_BACKEND_IE
,但实际值可通过 wx.html2.WebViewBackendIE
获得。以下是一个完整的工作示例,改编自 here:
import wx
import wx.html2
class MyBrowser(wx.Frame):
def __init__(self, *args, **kwds):
wx.Frame.__init__(self, *args, **kwds)
sizer = wx.BoxSizer(wx.VERTICAL)
self.browser = wx.html2.WebView.New(self, backend=wx.html2.WebViewBackendIE)
sizer.Add(self.browser, 1, wx.EXPAND, 10)
self.SetSizer(sizer)
self.SetSize((700, 700))
if __name__ == '__main__':
app = wx.App()
dialog = MyBrowser(None, -1)
dialog.browser.LoadURL("https://www.google.com")
dialog.Show()
app.MainLoop()
当然,这只适用于 Windows。有关 wxWidgets 中 WebView 的更多信息,请参阅 documentation.
如果您已经在应用程序中使用 (Py)Qt,Qt 还支持使用 QAxWidget
class 在 windows 中嵌入 ActiveX 对象。 Qt documentation. Below is a minimal PyQt4 example 中有一个网络浏览器示例:
browser = QAxContainer.QAxWidget()
browser.setControl("<ActiveX ID>") # e.g. "{8856F961-340A-11D0-A96B-00C04FD705A2}"
browser.dynamicCall('Navigate(const QString&)', QtCore.QString("google.com"))
从 Python 开始,您可以毫不费力地使用 COM。这是一个简单的例子:
import win32com.client
ie = win32com.client.Dispatch("InternetExplorer.Application")
ie.Visible = 1
ie.Navigate('www.google.com')
您可能只想下载此项目并通读 IEC.py 以获得所有有用的 com 命令(我知道您不是在寻找链接,但在这种情况下,有已经有 500 行代码可以为您节省大量时间,点击按钮、获取文档文本、复选框、提交表单等)http://www.mayukhbose.com/python/IEC/
我认为这会解决您的问题。如果您已经知道所有的 IE com 命令(或者只需在 IPython 中点击 "tab" 以获得列表 In [1]: ie. <tab>
),那么上面的简单示例就足够了。
另请注意,在使用 COM 对象时,通常只需 运行 即可大大加快它们的速度:
from win32com.client import makepy
makepy.main()
然后滚动弹出窗口 window 并找到您的应用程序(Microsoft Internet Controls
for IE)- 所有已注册的 COM 接口都应该在那里,这将自动生成内部方法而不是每次都生成你打电话给图书馆的时间。