当前位置: 首页 > 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…...

保姆级教程:用Python和Open3D玩转激光雷达点云与图像融合(附KITTI数据集实战)

从零实现激光雷达与相机融合&#xff1a;Open3DKITTI实战指南 当激光雷达的精确测距遇上相机的丰富纹理&#xff0c;自动驾驶感知系统便拥有了"立体视觉"——这正是多模态融合技术的魅力所在。本文将带您用Python和Open3D构建一个完整的点云-图像融合流水线&#xff…...

nli-distilroberta-base环境配置:Ubuntu/CentOS下Python依赖与CUDA版本兼容说明

nli-distilroberta-base环境配置&#xff1a;Ubuntu/CentOS下Python依赖与CUDA版本兼容说明 1. 项目概述 nli-distilroberta-base是一个基于DistilRoBERTa模型的自然语言推理(NLI)Web服务&#xff0c;专门用于判断两个句子之间的逻辑关系。该服务能够快速分析句子对&#xff…...

Python 3.15 JIT深度解析(仅限首批内测用户验证的6项隐藏能力)

第一章&#xff1a;Python 3.15 JIT 的演进脉络与内测生态定位Python 3.15 并非官方已发布的正式版本&#xff0c;而是社区中围绕“Python JIT 加速”持续探索所形成的前瞻性技术代号&#xff0c;特指以 CPython 为核心、集成实验性即时编译器&#xff08;JIT&#xff09;的内测…...

Jupyter Notebook文件损坏?3种方法快速恢复.ipynb中的代码(附Python脚本)

Jupyter Notebook文件损坏&#xff1f;3种方法快速恢复.ipynb中的代码&#xff08;附Python脚本&#xff09; 当你在深夜赶数据分析报告时突然断电&#xff0c;重启后发现Jupyter Notebook文件无法打开——这种绝望感每个数据工作者都懂。.ipynb文件损坏并非世界末日&#xff0…...

如何通过有效方法提升儿童专注力障碍的注意力集中度?

提升儿童专注力的有效策略与技巧解析 在帮助儿童提高注意力集中度的过程中&#xff0c;首先需要建立一个适合学习的环境。创造一个安静、整洁的学习空间&#xff0c;减少杂音和干扰&#xff0c;有助于孩子更好地专注。此外&#xff0c;开展一些分段学习的小技巧也是非常有效的方…...

【第四周】论文精读:RAG4DMC:用于数据级模态补全的检索增强生成

前言&#xff1a;在多模态应用中&#xff0c;数据往往面临“模态缺失”的窘境&#xff08;如仅有图片无文字&#xff0c;或仅有文字无图片&#xff09;&#xff0c;这严重限制了模型的训练与应用。虽然预训练生成模型&#xff08;如 Diffusion、LLM&#xff09;看似是天然的解法…...

为什么92%的FastAPI AI服务仍在用阻塞式响应?(深度剖析async def vs sync def在LLM流式场景下的内存泄漏与协程死锁)

第一章&#xff1a;FastAPI 2.0异步AI流式响应的核心价值与演进脉络在大模型服务规模化部署的背景下&#xff0c;传统同步HTTP响应已难以满足低延迟、高吞吐、用户体验敏感的AI交互场景。FastAPI 2.0通过深度整合Python 3.11原生异步运行时、优化ASGI中间件栈及重构StreamingRe…...

3个实用技巧:Qwen Code多语言支持让开发者效率提升40%

3个实用技巧&#xff1a;Qwen Code多语言支持让开发者效率提升40% 【免费下载链接】qwen-code Qwen Code is a coding agent that lives in the digital world. 项目地址: https://gitcode.com/GitHub_Trending/qw/qwen-code 在全球化协作日益频繁的开发环境中&#xff…...

VIA键盘配置器:5步解锁机械键盘自定义新境界 [特殊字符]

VIA键盘配置器&#xff1a;5步解锁机械键盘自定义新境界 &#x1f3ae; 【免费下载链接】releases 项目地址: https://gitcode.com/gh_mirrors/re/releases 你是否曾经想过让你的机械键盘真正"属于"你&#xff1f;VIA键盘配置器就是那把打开个性化键盘世界的…...

Flowable7.x实战指南:从部署到前端渲染,详解流程图可视化全链路

1. Flowable7.x流程图可视化全流程解析 第一次接触Flowable7.x的流程图可视化功能时&#xff0c;我完全被它强大的业务建模能力震撼到了。想象一下&#xff0c;你只需要在可视化编辑器里拖拽几个节点&#xff0c;就能构建出复杂的业务流程&#xff0c;这比直接写XML定义要直观…...