python中使用xml快速创建Caption和URL书签管理器应用程序
导语:
本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一个Python脚本。
C:\pythoncode\blog\savexml.py

在软件开发中,创建功能强大且易于使用的用户界面是至关重要的。wxPython库为Python开发人员提供了一种简单而强大的方式来创建跨平台的图形用户界面。本文将介绍如何使用wxPython库创建一个Caption和URL管理器应用程序,让我们一起来看看吧!
首先,我们需要安装wxPython库。可以使用pip命令来安装:
pip install wxPython
安装完成后,我们就可以开始编写代码了。下面是完整的代码:
import wx
import os
import xml.etree.ElementTree as ET
import subprocessclass MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title="Caption and URL Manager", size=(800, 600))self.panel = wx.Panel(self)# 创建Caption和URL输入框self.caption_label = wx.StaticText(self.panel, label="Caption:")self.caption_text = wx.TextCtrl(self.panel)self.url_label = wx.StaticText(self.panel, label="URL:")self.url_text = wx.TextCtrl(self.panel)# 创建按钮并绑定事件处理函数self.save_button = wx.Button(self.panel, label="Save")self.save_button.Bind(wx.EVT_BUTTON, self.on_save_button_click)self.run_button = wx.Button(self.panel, label="Run createbuttonfromxml.py")self.run_button.Bind(wx.EVT_BUTTON, self.on_run_button_click)# 创建Memo文本框用于显示data.xml内容self.memo = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE|wx.TE_READONLY)# 创建文件夹浏览按钮self.browse_button = wx.Button(self.panel, label="Browse Folder")self.browse_button.Bind(wx.EVT_BUTTON, self.on_browse_button_click)# 创建文件列表框self.file_listbox = wx.ListBox(self.panel)self.file_listbox.Bind(wx.EVT_LISTBOX, self.on_file_listbox_select)# 创建水平和垂直尺寸器布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.caption_label, 0, wx.ALL, 5)sizer.Add(self.caption_text, 0, wx.EXPAND|wx.ALL, 5)sizer.Add(self.url_label, 0, wx.ALL, 5)sizer.Add(self.url_text, 0, wx.EXPAND|wx.ALL, 5)sizer.Add(self.save_button, 0, wx.ALL, 5)sizer.Add(self.run_button, 0, wx.ALL, 5)sizer.Add(self.memo, 1, wx.EXPAND|wx.ALL, 5)sizer.Add(self.browse_button, 0, wx.ALL, 5)sizer.Add(self.file_listbox, 1, wx.EXPAND|wx.ALL, 5)self.panel.SetSizer(sizer)self.Show()def on_save_button_click(self, event):caption = self.caption_text.GetValue()url = self.url_text.GetValue()tree = ET.ElementTree()try:tree.parse('data.xml')root = tree.getroot()except FileNotFoundError:root = ET.Element("data")tree._setroot(root)new_item = ET.SubElement(root, "item")ET.SubElement(new_item, "caption").text = captionET.SubElement(new_item, "url").text = urltree.write('data.xml')self.update_memo_content()def on_run_button_click(self, event):try:subprocess.run(["python", "createformbuttonfromxml.py"], check=True)except subprocess.CalledProcessError as e:wx.MessageBox(f"Error running createformbuttonfromxml.py: {e}", "Error", wx.OK|wx.ICON_ERROR)def on_browse_button_click(self, event):dlg = wx.DirDialog(self.panel, "Choose a folder", style=wx.DD_DEFAULT_STYLE)if dlg.ShowModal() == wx.ID_OK:folder_path = dlg用户选择的文件夹路径files = os.listdir(folder_path)self.file_listbox.Clear()self.file_listbox.InsertItems(files, 0)dlg.Destroy()def on_file_listbox_select(self, event):selection = self.file_listbox.GetStringSelection()self.update_memo_content(selection)def update_memo_content(self, selection=None):if selection:file_path = os.path.join(folder_path, selection)with open(file_path, "r") as file:content = file.read()else:content = ""self.memo.SetValue(content)app = wx.App()
frame = MyFrame(None)
app.MainLoop()
以上是一个简单的Caption和URL管理器应用程序的代码示例。在这个应用程序中,我们使用wxPython库创建了一个主窗口,并在窗口中添加了Caption和URL输入框、保存按钮、运行按钮、Memo文本框、文件夹浏览按钮和文件列表框等控件。用户可以输入Caption和URL,并点击保存按钮将其保存到XML文件中。用户还可以浏览文件夹并选择HTML文件,在Memo文本框中显示文件的内容。点击运行按钮会执行另一个Python脚本。
这只是一个简单的示例应用程序,你可以根据自己的需求进行扩展和定制。使用wxPython库,你可以轻松地创建各种类型的图形用户界面应用程序,并为用户提供友好的交互体验。
全部代码:
import wx
import os
import xml.etree.ElementTree as ET
import subprocess
class MyFrame(wx.Frame):def __init__(self, parent):wx.Frame.__init__(self, parent, title="Caption and URL Manager", size=(800, 600))self.panel = wx.Panel(self)# 创建Caption和URL输入框self.caption_label = wx.StaticText(self.panel, label="Caption:")self.caption_text = wx.TextCtrl(self.panel)self.url_label = wx.StaticText(self.panel, label="URL:")self.url_text = wx.TextCtrl(self.panel)# 创建按钮并绑定事件处理函数self.save_button = wx.Button(self.panel, label="Save")self.save_button.Bind(wx.EVT_BUTTON, self.on_save_button_click)self.run_button = wx.Button(self.panel, label="Run createbuttonfromxml.py")self.run_button.Bind(wx.EVT_BUTTON, self.on_run_button_click)# 创建Memo文本框用于显示data.xml内容self.memo = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE | wx.TE_READONLY)# 创建文件夹浏览按钮self.browse_button = wx.Button(self.panel, label="Browse Folder")self.browse_button.Bind(wx.EVT_BUTTON, self.on_browse_button_click)# 创建文件列表框 # self.file_listbox = wx.ListBox(self.panel)# 创建文件列表框self.file_listbox = wx.ListBox(self.panel)self.file_listbox.Bind(wx.EVT_LISTBOX, self.on_file_listbox_select) # 创建水平和垂直尺寸器布局sizer = wx.BoxSizer(wx.VERTICAL)sizer.Add(self.caption_label, 0, wx.ALL, 5)sizer.Add(self.caption_text, 0, wx.EXPAND | wx.ALL, 5)sizer.Add(self.url_label, 0, wx.ALL, 5)sizer.Add(self.url_text, 0, wx.EXPAND | wx.ALL, 5)sizer.Add(self.save_button, 0, wx.ALL, 5)sizer.Add(self.run_button, 0, wx.ALL, 5)sizer.Add(self.memo, 1, wx.EXPAND | wx.ALL, 5)sizer.Add(self.browse_button, 0, wx.ALL, 5)sizer.Add(self.file_listbox, 1, wx.EXPAND | wx.ALL, 5)self.panel.SetSizer(sizer)self.Show()def on_save_button_click(self, event):caption = self.caption_text.GetValue()url = self.url_text.GetValue()tree = ET.ElementTree()try:tree.parse('data.xml')root = tree.getroot()except FileNotFoundError:root = ET.Element("data")tree._setroot(root)new_item = ET.SubElement(root, "item")ET.SubElement(new_item, "caption").text = captionET.SubElement(new_item, "url").text = urltree.write('data.xml')self.update_memo_content()# def on_run_button_click(self, event):# os.system("python createbuttonfromxml.py")def on_run_button_click(self, event):try:subprocess.run(["python", "createformbuttonfromxml.py"], check=True)except subprocess.CalledProcessError as e:wx.MessageBox(f"Error running createformbuttonfromxml.py: {e}", "Error", wx.OK | wx.ICON_ERROR)def on_browse_button_click(self, event):dlg = wx.DirDialog(self.panel, "Choose a folder", style=wx.DD_DEFAULT_STYLE)if dlg.ShowModal() == wx.ID_OK:folder_path = dlg.GetPath()self.update_file_listbox(folder_path)dlg.Destroy()def update_memo_content(self):try:with open('data.xml', 'r') as f:self.memo.SetValue(f.read())except FileNotFoundError:self.memo.SetValue("data.xml file not found.")def update_file_listbox(self, folder_path):self.file_listbox.Clear()for root, dirs, files in os.walk(folder_path):for file in files:if file.endswith(".html"):file_path = os.path.join(root, file)self.file_listbox.Append(file_path)def update_url_text(self, event):selected_file = self.file_listbox.GetStringSelection()self.url_text.SetValue(selected_file)def on_file_listbox_select(self, event):selected_file = self.file_listbox.GetStringSelection()self.url_text.SetValue(selected_file)app = wx.App()
frame = MyFrame(None)
app.MainLoop()
总结:
本文介绍了如何使用wxPython库创建一个Caption和URL管理器应用程序。通过这个示例应用程序,你可以了解到如何创建图形用户界面、处理用户输入、保存数据到XML文件、浏览文件夹、选择文件以及运行其他Python脚本等功能。希望本文能够帮助你入门wxPython库,并启发你开发更多强大的图形用户界面应用程序!
相关文章:
python中使用xml快速创建Caption和URL书签管理器应用程序
导语: 本文介绍如何使用wxPython库创建一个Caption和URL管理器应用程序。该应用程序具有图形用户界面,允许用户输入Caption和URL,并将其保存到XML文件中。此外,还提供了浏览文件夹并选择HTML文件的功能,并可以运行另一…...
分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测
分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测 目录 分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.分类预测 | MATLAB实现DBN-SVM深度置信网络结合支持向量机多输入分…...
Vue中使用v-bind:class动态绑定多个类名
Vue.js是一个流行的前端框架,它可以帮助开发者构建动态交互的UI界面。在Vue.js开发中,经常需要动态绑定HTML元素的class(类名)属性,以改变元素的外观和行为。本文将介绍采用v-bind:class指令在Vue中如何动态绑定多个类…...
深入了解Maven(一)
目录 一.Maven介绍与功能 二.依赖管理 1.依赖的配置 2.依赖的传递性 3.排除依赖 4.依赖的作用范围 5.依赖的生命周期 一.Maven介绍与功能 maven是一个项目管理和构建工具,是基于对象模型POM实现。 Maven的作用: 便捷的依赖管理:使用…...
PostgreSQL中的密码验证方法
假设您想在客户端/服务器协议中实现密码身份验证方法。 您将如何做到这一点以及可能出现的问题是什么? 以下是 PostgreSQL 中如何完成此操作的故事。 password 一开始,PostgreSQL 只有 pg_hba.conf 中现在称为“password”的方法。 这是你能想象到的最…...
【微信小程序】小程序之间的跳转方式总结
想要从该小程序跳转到其他小程序怎么做? 方式 小程序之间的跳转方法有: wx.navigateTo:保留当前页面,跳转到应用内的某个页面,然后从该页面返回上一页的时候使用wx.navigateBack返回。wx.switchTab:跳转…...
基于Mysqlrouter+MHA+keepalived实现高可用半同步 MySQL Cluster项目
目录 项目名称: 基于Mysqlrouter MHA keepalived实现半同步主从复制MySQL Cluster MySQL Cluster: 项目架构图: 项目环境: 项目环境安装包: 项目描述: 项目IP地址规划: 项目步骤: 一…...
Android12.0 系统限制上网系列之iptables用IOemNetd实现清除所有规则的实现
1.前言 在12.0的系统rom定制化开发中,对于系统限制网络的使用,需要在system中netd网络这块的产品要求中,会要求设置屏蔽ip地址之内的功能, liunx中iptables命令也是比较重要的,接下来就来在IOemNetd这块实现清除所有自定义规则的的相关功能 2. 系统限制上网系列之iptab…...
vue2和vue3响应式原理
Object.DefineProperty配置对象的主要属性有: value:20 //添加的属性的value enumerable:true //是否可以被枚举获取到 默认:false writeable:true //value是否可以被修改 默认:false configurable:true //是否可以被删除 默认:f…...
【面试八股文】每日一题:谈谈你对线程的理解
每日一题-Java核心-谈谈你对线程的理解【面试八股文】 Java线程是Java程序中的执行单元。一个Java程序可以同时运行多个线程,每个线程可以独立执行不同的任务。线程的执行是并发的,即多个线程可以同时执行。 1. 线程的特点 Java中的线程有如下的特点 轻…...
arm开发板 GDB远程调试方法
1.前言 1.在linux下开发,免不了使用gdb调试,但是linux下开发嵌入式,都是跑在ARM板子上的,网上有很多GDB的基础教程,但是能在ARM开发板用的时候,会有各种问题。 比如:*.cpp: No such file or di…...
Linux命令(71)之unxz
linux命令之unxz 1.unxz介绍 linux命令unxz是用来解压由xz命令压缩的文件。unxz等价于xz -d 2.unxz用法 unxz [-c] filename.xz unxz常用参数 参数说明-c <目录>将压缩文件解压到指定目录 3.实例 3.1.解压zzz.txt.xz文件至当前目录 命令: unxz zzz.tx…...
广告牌安全传感器,实时监测事故隐患尽在掌握
在现代城市中,广告牌作为商业宣传的重要媒介,已然成为城市中一道独特的风景线。然而,随着城市迅速发展,广告牌的安全问题也引起了大众关注。广告招牌一般悬挂于建筑物高处,量大面大。由于设计、材料、施工方法的缺陷&a…...
对比学习损失—InfoNCE理论理解
InfoNoise的理解 InfoNCE loss温度系数 τ \tau τ InfoNCE loss 最近在看对比学习的东西,记录点基础的东西 「对比学习」 属于无监督学习的一种,给一堆数据,没有标签,自己学习出一种特征表示。 InfoNCE 这个损失是来自于论文&am…...
贝锐蒲公英助力电子公交站牌联网远程运维,打造智慧出行新趋势
在现代城市公共交通系统中,我们随处可见电子公交站牌的身影。作为公共交通服务的核心之一,电子公交站牌的稳定运行至关重要,公交站台的实时公交状况、公共广告信息,是市民候车时关注的焦点。 某交通科技公司在承接某市智能电子站牌…...
SpringBoot + Vue 微人事(十)
职位管理前后端接口对接 先把table中的数据展示出来,table里面的数据实际上是positions里面的数据,就是要给positions:[] 赋上值 可以在methods中定义一个initPosition方法 methods:{//定义一个初始化positions的方法initPositions(){//发送一个get请求…...
【Redis】Redis哨兵模式
【Redis】Redis哨兵模式 Redis主从模式当主服务器宕机后,需要手动把一台从服务器切换为主服务器,需要人工干预费事费力,为了解决这个问题出现了哨兵模式。 哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控…...
系统架构师---软件重用、基于架构的软件设计、软件模型
目录 软件重用 构件技术 基于架构的软件设计 ABSD方法与生命周期 抽象功能需求 用例 抽象的质量和业务需求 架构选项 质量场景 约束 基于架构的软件开发模型 架构需求 需求获取 标识构件 需求评审 架构设计 架构文档 架构复审 架构实现 架构演化 前言&…...
【Web开发指南】MyEclipse XML编辑器的高级功能简介
MyEclipse v2023.1.2离线版下载 1. 在MyEclipse中编辑XML 本文档介绍MyEclipse XML编辑器中的一些可用的函数,MyEclipse XML编辑器包括高级XML编辑,例如: 语法高亮显示标签和属性内容辅助实时验证(当您输入时)文档内容的源(Sou…...
设计模式-观察者模式(观察者模式的需求衍变过程详解,关于监听的理解)
目录 前言概念你有过这样的问题吗? 详细介绍原理:应用场景: 实现方式:类图代码 问题回答监听,为什么叫监听,具体代码是哪观察者模式的需求衍变过程观察者是为什么是行为型 总结: 前言 在软件设计…...
ESP32读取DHT11温湿度数据
芯片:ESP32 环境:Arduino 一、安装DHT11传感器库 红框的库,别安装错了 二、代码 注意,DATA口要连接在D15上 #include "DHT.h" // 包含DHT库#define DHTPIN 15 // 定义DHT11数据引脚连接到ESP32的GPIO15 #define D…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
【2025年】解决Burpsuite抓不到https包的问题
环境:windows11 burpsuite:2025.5 在抓取https网站时,burpsuite抓取不到https数据包,只显示: 解决该问题只需如下三个步骤: 1、浏览器中访问 http://burp 2、下载 CA certificate 证书 3、在设置--隐私与安全--…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
Go 语言并发编程基础:无缓冲与有缓冲通道
在上一章节中,我们了解了 Channel 的基本用法。本章将重点分析 Go 中通道的两种类型 —— 无缓冲通道与有缓冲通道,它们在并发编程中各具特点和应用场景。 一、通道的基本分类 类型定义形式特点无缓冲通道make(chan T)发送和接收都必须准备好࿰…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
【Linux系统】Linux环境变量:系统配置的隐形指挥官
。# Linux系列 文章目录 前言一、环境变量的概念二、常见的环境变量三、环境变量特点及其相关指令3.1 环境变量的全局性3.2、环境变量的生命周期 四、环境变量的组织方式五、C语言对环境变量的操作5.1 设置环境变量:setenv5.2 删除环境变量:unsetenv5.3 遍历所有环境…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
