当前位置: 首页 > news >正文

wxpython:wx.html2 是好用的 WebView 组件

wxpython : wx.html2 是好用的 WebView 组件。

pip install wxpython==4.2
wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB)
Successfully installed wxpython-4.2.0

cd \Python37\Scripts

wxdemo.exe 取得 wxPython-demo-4.2.0.tar.gz

wxdocs.exe 取得 wxPython-docs-4.2.0.tar.gz

编写 test_wx_html2.py 如下

# -*- coding: utf-8 -*-
import os
import sys
import wx
import wx.html2 as wbv# WebView Backends
backends = [(wbv.WebViewBackendEdge, 'WebViewBackendEdge'),(wbv.WebViewBackendIE, 'WebViewBackendIE'),(wbv.WebViewBackendWebKit, 'WebViewBackendWebKit'),(wbv.WebViewBackendDefault, 'WebViewBackendDefault'),
]#----------------------------------------------------------------------
class TestPanel(wx.Panel):def __init__(self, parent, id, frame=None):wx.Panel.__init__(self, parent, -1)self.current = "http://localhost:8888"self.frame = frameif frame:self.titleBase = frame.GetTitle()sizer = wx.BoxSizer(wx.VERTICAL)btnSizer = wx.BoxSizer(wx.HORIZONTAL)# The Internet Explorer emulation level is a persistent per-user and# per-application value.wbv.WebView.MSWSetEmulationLevel(wbv.WEBVIEWIE_EMU_IE11)# If you would like to reset it back to the default (no-emulation) then# it can be done by calling this:# wbv.WebView.MSWSetEmulationLevel(wbv.WEBVIEWIE_EMU_DEFAULT)# Find an available backendbackend = Nonefor id, name in backends:available = wbv.WebView.IsBackendAvailable(id)print("Backend 'wx.html2.{}' availability: {}\n".format(name, available))if available and backend is None:backend = idprint("Using backend: '{}'\n".format(str(backend, 'ascii')))# Create the WebViewself.wv = wbv.WebView.New(self, backend=backend)self.Bind(wbv.EVT_WEBVIEW_NAVIGATING, self.OnWebViewNavigating, self.wv)self.Bind(wbv.EVT_WEBVIEW_LOADED, self.OnWebViewLoaded, self.wv)btn = wx.Button(self, -1, "Open", style=wx.BU_EXACTFIT)self.Bind(wx.EVT_BUTTON, self.OnOpenButton, btn)btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)btn = wx.Button(self, -1, "<--", style=wx.BU_EXACTFIT)self.Bind(wx.EVT_BUTTON, self.OnPrevPageButton, btn)btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanGoBack, btn)btn = wx.Button(self, -1, "-->", style=wx.BU_EXACTFIT)self.Bind(wx.EVT_BUTTON, self.OnNextPageButton, btn)btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)self.Bind(wx.EVT_UPDATE_UI, self.OnCheckCanGoForward, btn)btn = wx.Button(self, -1, "Stop", style=wx.BU_EXACTFIT)self.Bind(wx.EVT_BUTTON, self.OnStopButton, btn)btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)btn = wx.Button(self, -1, "Refresh", style=wx.BU_EXACTFIT)self.Bind(wx.EVT_BUTTON, self.OnRefreshPageButton, btn)btnSizer.Add(btn, 0, wx.EXPAND|wx.ALL, 2)txt = wx.StaticText(self, -1, "Location:")btnSizer.Add(txt, 0, wx.CENTER|wx.ALL, 2)self.location = wx.ComboBox(self, -1, "", style=wx.CB_DROPDOWN|wx.TE_PROCESS_ENTER)self.location.AppendItems(['https://fanyi.baidu.com/','https://cn.bing.com/','https://fanyi.sogou.com/'])self.Bind(wx.EVT_COMBOBOX, self.OnLocationSelect, self.location)self.location.Bind(wx.EVT_TEXT_ENTER, self.OnLocationEnter)btnSizer.Add(self.location, 1, wx.EXPAND|wx.ALL, 2)sizer.Add(btnSizer, 0, wx.EXPAND)sizer.Add(self.wv, 1, wx.EXPAND)self.SetSizer(sizer)self.wv.LoadURL(self.current)def ShutdownDemo(self):# put the frame title backif self.frame:self.frame.SetTitle(self.titleBase)# WebView eventsdef OnWebViewNavigating(self, evt):# this event happens prior to trying to get a resourceif evt.GetURL() == 'http://www.microsoft.com/':if wx.MessageBox("Are you sure you want to visit Microsoft?",style=wx.YES_NO|wx.ICON_QUESTION) == wx.NO:# This is how you can cancel loading a page.evt.Veto()def OnWebViewLoaded(self, evt):# The full document has loadedself.current = evt.GetURL()self.location.SetValue(self.current)# Control bar eventsdef OnLocationSelect(self, evt):url = self.location.GetStringSelection()print('OnLocationSelect: %s\n' % url)self.wv.LoadURL(url)def OnLocationEnter(self, evt):url = self.location.GetValue()self.location.Append(url)self.wv.LoadURL(url)def OnOpenButton(self, event):dlg = wx.TextEntryDialog(self, "Open Location","Enter a full URL or local path",self.current, wx.OK|wx.CANCEL)dlg.CentreOnParent()if dlg.ShowModal() == wx.ID_OK:self.current = dlg.GetValue()self.wv.LoadURL(self.current)dlg.Destroy()def OnPrevPageButton(self, event):self.wv.GoBack()def OnNextPageButton(self, event):self.wv.GoForward()def OnCheckCanGoBack(self, event):event.Enable(self.wv.CanGoBack())def OnCheckCanGoForward(self, event):event.Enable(self.wv.CanGoForward())def OnStopButton(self, evt):self.wv.Stop()def OnRefreshPageButton(self, evt):self.wv.Reload()class MyFrame(wx.Frame):    def __init__(self):super().__init__(parent=None, title='wx.html2 示例', size=(1000, 600))self.panel = TestPanel(self, wx.ID_ANY)self.Show(True)if __name__ == '__main__':app = wx.App(False) # False: 意味着不重定向标准输出和错误输出到窗口上frame = MyFrame()app.MainLoop()

运行 python test_wx_html2.py 

参考: wxpython事件绑定方法的选择和应用

相关文章:

wxpython:wx.html2 是好用的 WebView 组件

wxpython : wx.html2 是好用的 WebView 组件。 pip install wxpython4.2 wxPython-4.2.0-cp37-cp37m-win_amd64.whl (18.0 MB) Successfully installed wxpython-4.2.0 cd \Python37\Scripts wxdemo.exe 取得 wxPython-demo-4.2.0.tar.gz wxdocs.exe 取得 wxPython-docs-4.…...

《QT+PCL 第五章》点云特征-PFH

QT增加点云特征PFH 代码用法代码 #include <pcl/io/pcd_io.h> #include <pcl/features/normal_3d.h> #include <pcl/features/pfh.h>int main...

【分享】小型园区组网场景

小型园区组网图 在小型园区中&#xff0c;S2700&S3700通常部署在网络的接入层&#xff0c;S5700&S6700通常部署在网络的核心&#xff0c;出口路由器一般选用AR系列路由器。 接入交换机与核心交换机通过Eth-Trunk组网保证可靠性。 每个部门业务划分到一个VLAN中&#…...

LeetCode 1267. 统计参与通信的服务器

【LetMeFly】1267.统计参与通信的服务器 力扣题目链接&#xff1a;https://leetcode.cn/problems/count-servers-that-communicate/ 这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表…...

169. 多数元素(哈希表)

169. 多数元素 给定一个大小为 n 的数组 nums &#xff0c;返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。 你可以假设数组是非空的&#xff0c;并且给定的数组总是存在多数元素。 class Solution { public:int majorityElement(vector<int&…...

微服务集成spring cloud sentinel

目录 1. sentinel使用场景 2. sentinel组成 3. sentinel dashboard搭建 4. sentinel客户端详细使用 4.1 引入依赖 4.2 application.properties增加dashboard注册地址 4.3 手动增加限流配置类 4.4 rest接口及service类 4.5 通过dashboard动态配置限流规则 1. sentinel使…...

2023年最新版Windows环境下|Java8(jdk1.8)安装教程

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【JavaSE_primary】 jdk1.8的下载和使用总共分为3个步骤&#xff1a; jdk1.8的下载、jdk1.8的安装、配置环境变量。 目录 一、jdk1.8下载…...

linux -- jdk 的安装

jdk 的安装 jdk包下载 链接: https://pan.baidu.com/s/1wa1TJGtCPKQqeCGDZWaP6g 密码: 8el6 安装及验证 ## jdk包上传次目录 /usr/local/software cd /usr/local/software tar -zxvf /usr/local/software/jdk-8u212-linux-x64.tar.gz -C /usr/local cd /usr/local mv jdk1…...

网络安全—黑客技术(学习笔记)

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…...

Java入职第十一天,深入了解静态代理和动态代理(jdk、cglib)

一、代理模式 一个类代表另一个类去完成扩展功能,在主体类的基础上,新增一个代理类,扩展主体类功能,不影响主体,完成额外功能。比如买车票,可以去代理点买,不用去火车站,主要包括静态代理和动态代理两种模式。 代理类中包含了主体类 二、静态代理 无法根据业务扩展,…...

Snappy算法:高速压缩和解压缩技术的顶尖玩家

文章首发地址 Snappy是一种快速压缩和解压缩数据的算法。它是由Google开发的&#xff0c;旨在提供高速的压缩和解压缩速度&#xff0c;同时保持较高的压缩比。 Snappy算法的设计目标是追求速度而不是最高的压缩率。相比于其他压缩算法&#xff08;如Gzip或LZ77&#xff09;&am…...

Python中的format()函数详细讲解

注&#xff1a;所以代码皆成功运行&#xff0c;可直接复制运行 一、基本使用 1、Python中的format()函数是一个格式字符串的函数&#xff0c;通过花括号{}识别替换字段&#xff0c;从而完成字符串的格式化。 #format后面放数字、字符串都可以 print("{}喜欢{}岁的{}&qu…...

11. 盛最多水的容器(c++题解)

11. 盛最多水的容器&#xff08;c题解&#xff09; 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水。 返回容器可以储存的最大…...

历史最佳二季度表现后,爱奇艺想为用户提供更多价值

以爱奇艺为首&#xff0c;随着长视频平台相继转变运营思路&#xff0c;走向盈利目标&#xff0c;最早完成蜕变的爱奇艺&#xff0c;已开始迈向下一阶段。 近日&#xff0c;爱奇艺发布了截至6月30日的2023年第二季度财报。除了依然亮眼的内容表现、业绩成果外&#xff0c;爱奇艺…...

HDLBits-Verilog学习记录 | Verilog Language-Basics(2)

文章目录 9.Declaring wires | wire decl10. 7458 chip 9.Declaring wires | wire decl problem:Implement the following circuit. Create two intermediate wires (named anything you want) to connect the AND and OR gates together. Note that the wire that feeds the …...

Ubuntu22.0网络/网卡丢失

Ubuntu22.0开机突然连不上网了&#xff0c;右上角网络图标消失了&#xff0c;设置里网络也没有了“有线”&#xff0c;只剩下VPN了&#xff0c;试了好多种办法&#xff0c;最终终于解决了。 看到有些直接用的下面的两条命令&#xff0c;有解决的&#xff0c;不过我这不行。 s…...

Linux 常用

系统信息 查看CPU信息&#xff08;型号&#xff09; cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c查看物理CPU个数 cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l查看每个物理CPU中core的个数(即核数) cat /proc/cpuinfo | grep "c…...

AWS 提示证书签名过期无法自动更新

如果域名没有通过验证的话&#xff0c;证书的过去是没有办法自动更新的。 验证的方式也非常简单&#xff0c;通过下面的配置&#xff0c;把 CNAME添加到你的域名上面&#xff0c;AWS 就可会自动完成验证了。 当添加完成后&#xff0c;AWS 验证需要的时间大致在 30 分钟到 1 个…...

Git版本管理(01) 简介 基本提交相关命令

1 git简介 Git是一种分布式版本控制工具&#xff0c;用于跟踪文件和代码的变化&#xff0c;协调多个开发者之间的协作&#xff0c;并提供版本控制和代码管理的功能。 官方学习可参考文档-> Git版本控制工具特点总结如下&#xff1a; 分布式版本控制&#xff1a;Git采用分…...

解决 vue项目报错:digital envelope routines::unsupported

出现这个错误是因为 node.js V17版本中最近发布的OpenSSL3.0, 而OpenSSL3.0对允许算法和密钥大小增加了严格的限制&#xff0c;可能会对生态系统造成一些影响. 方法1&#xff1a;运行前$ npm run serve前 先运行 export NODE_OPTIONS--openssl-legacy-provider 方法2&#xf…...

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)

前言&#xff1a; 双亲委派机制对于面试这块来说非常重要&#xff0c;在实际开发中也是经常遇见需要打破双亲委派的需求&#xff0c;今天我们一起来探索一下什么是双亲委派机制&#xff0c;在此之前我们先介绍一下类的加载器。 目录 ​编辑 前言&#xff1a; 类加载器 1. …...

Ubuntu Cursor升级成v1.0

0. 当前版本低 使用当前 Cursor v0.50时 GitHub Copilot Chat 打不开&#xff0c;快捷键也不好用&#xff0c;当看到 Cursor 升级后&#xff0c;还是蛮高兴的 1. 下载 Cursor 下载地址&#xff1a;https://www.cursor.com/cn/downloads 点击下载 Linux (x64) &#xff0c;…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...