WxPython跨平台开发框架之图标选择界面
在使用 wxPython 开发跨平台桌面应用程序时,创建一个图标选择界面通常用于让用户从图标资源库中选择图标,我们可以把图标分为自定义的图标资源和系统的图标资源两大类,最终我们把它们整合一起使用,在框架的界面中使用,包括工具栏、右键菜单、按钮、图片等所需的地方显示,实现图文并茂的友好界面展示。本篇随笔介绍这两种图标资源的管理和使用过程。
1、图标分类介绍
这里图标我们分为两类,一类是wxPython内置的图标资源,以wx.Art_开始。wx.ART_
是 wxPython 提供的艺术资源(Art Resource)常量,用于在界面中快速访问通用的图标或位图资源。这些资源可以通过 wx.ArtProvider
获取,主要用于创建标准化的界面,例如工具栏、菜单和对话框中的图标。这类可以使用 wx.ArtProvider.GetBitmap
或 wx.ArtProvider.GetIcon
获取对应的位图或图标。
bitmap = wx.ArtProvider.GetBitmap(wx.ART_INFORMATION, wx.ART_OTHER, (32, 32))
icon = wx.ArtProvider.GetIcon(wx.ART_WARNING, wx.ART_OTHER, (16, 16))
参数说明:
id
:指定图标的类型,例如wx.ART_INFORMATION
、wx.ART_WARNING
等。client
:指定图标的用途,一般用wx.ART_OTHER
。size
:指定图标的尺寸,例如(16, 16)
或(32, 32)
。
常用 wx.ART_
图标列表
以下是一些常见的 wx.ART_
常量及其用途:
常量名称 | 描述 | 示例用途 |
---|---|---|
wx.ART_INFORMATION |
信息图标(蓝色圆圈中的“i”) | 消息框或工具栏中的信息提示 |
wx.ART_WARNING |
警告图标(黄色三角形) | 警告对话框 |
wx.ART_ERROR |
错误图标(红色圆圈中的“X”) | 错误提示框 |
wx.ART_QUESTION |
问号图标 | 确认对话框中的问题提示 |
wx.ART_FILE_OPEN |
打开文件图标 | 文件打开按钮或菜单项 |
wx.ART_FILE_SAVE |
保存文件图标 | 文件保存按钮或菜单项 |
wx.ART_FILE_SAVE_AS |
另存为图标 | 另存为操作 |
wx.ART_DELETE |
删除图标 | 删除按钮或菜单项 |
wx.ART_COPY |
复制图标 | 工具栏中的复制按钮 |
wx.ART_CUT |
剪切图标 | 工具栏中的剪切按钮 |
wx.ART_PASTE |
粘贴图标 | 工具栏中的粘贴按钮 |
wx.ART_UNDO |
撤销图标 | 撤销操作按钮 |
wx.ART_REDO |
重做图标 | 重做操作按钮 |
wx.ART_FIND |
查找图标 | 查找工具栏或菜单项 |
wx.ART_HELP |
帮助图标(问号) | 帮助按钮或菜单项 |
wx.ART_NEW |
新建文件图标 | 新建按钮或菜单项 |
wx.ART_TIP |
提示图标 | 工具提示或信息提示框 |
wx.ART_ADD_BOOKMARK |
添加书签图标 | 书签管理工具 |
wx.ART_DEL_BOOKMARK |
删除书签图标 | 书签管理工具 |
wx.ART_GO_BACK |
返回图标 | 浏览器中的后退按钮 |
wx.ART_GO_FORWARD |
前进图标 | 浏览器中的前进按钮 |
wx.ART_GO_UP |
向上导航图标 | 文件管理器中的向上导航 |
wx.ART_GO_DOWN |
向下导航图标 | 文件管理器中的向下导航 |
wx.ART_EXECUTABLE_FILE |
可执行文件图标 | 显示可执行文件类型 |
wx.ART_NORMAL_FILE |
普通文件图标 | 显示普通文件类型 |
wx.ART_FOLDER |
文件夹图标 | 显示文件夹类型 |
wx.ART_FOLDER_OPEN |
打开文件夹图标 | 文件夹展开时显示 |
wx.ART_PRINT |
打印图标 | 打印操作按钮或菜单项 |
wx.ART_REPORT_VIEW |
报表视图图标 | 改变视图样式的按钮 |
wx.ART_LIST_VIEW |
列表视图图标 | 改变视图样式的按钮 |
通过使用 wx.ART_
,可以显著提高界面的一致性和开发效率!
另外一类是我们自己自定义的图标资源,为了方便整合使用,我们往往把它作为嵌入资源的方式,放在一个文件里面,如下所示。
需要的时候,直接导入这个core_image进行使用即可。
import core.core_images as images img: wx.Image = (
images.catalog[name].Image if name in images.catalog else result
)
img = img.Scale(icon_size, icon_size, wx.IMAGE_QUALITY_HIGH)
result = wx.Bitmap(img)
为了方便添加,我们可以使用wxpython的内置工具类img2py来生成代码到指定.py文件中。
from wx.tools import img2py
然后可以通过命令行来生成代码到python类文件中。
"-a -F -n TestStar2 bmp_source/teststar.png images.py"
需要详细了解各个参数的意思,可以查看 img2py.py 例子代码的说明即可。
我为了方便,参考修改编写了一个独立的工具类来方便生成所需的代码。
我可以再文件目录中选择所需的文件,然后右键复制文件地址,把它们路径复制出来。
2、图标的选择界面及使用
前面介绍了两种不同的图标资源库,我们应该再框架系统中能够顺利使用它们,以便为我们的工具栏、菜单、按钮等地方添加有趣而有意义的图标,比单纯的文本会好看很多。
如列表界面中的工具栏、按钮都采用了和内容一致的图标,比较美观一些。
有时候,我们右键菜单也可以根据图表库选择一致意义的图标。
表格显示的右键菜单
或者树形列表的右键菜单
因此我们在系统中统一展示和选择图标操作,如下所示,包括自定义图标,也包括内置图标。
自定义图标可以根据需要进行添加到内置资源的类即可,图标来源很多,网上也有很多,可以参考一下下面的这个网址获取一些:https://www.iconarchive.com/
在里面搜索关键字下载自己所需图标即可。
为了统一通过名称获取图标信息,我们可以编写一个通用的处理图标的函数来处理,如下函数。
def get_bitmap(name: str, icon_size: int = 32) -> wx.Bitmap:
"""获取位图,可以根据images里面的内容,或者是内置的wx.ART_XXX""" result = wx.ArtProvider.GetBitmap(
wx.ART_FOLDER, wx.ART_OTHER, (icon_size, icon_size)
)
try:
if name is None or name == "":
return result if name.startswith("wx.ART_"):
result = wx.ArtProvider.GetBitmap(
eval(name), wx.ART_OTHER, (icon_size, icon_size)
)
else:
img: wx.Image = (
images.catalog[name].Image if name in images.catalog else result
)
img = img.Scale(icon_size, icon_size, wx.IMAGE_QUALITY_HIGH)
result = wx.Bitmap(img)
except Exception as e:
print(f"get_bitmap 调用错误: {e},没有找到{name}的图片")
return result
这样我们在创建按钮、菜单的时候,使用这个生成图标位图的辅助函数即可通用了。
button = wx.Button(parent, id, btn_name)
button.Enable(enable)
if icon_name:
button.SetBitmap(get_bitmap(icon_name, icon_size))
button.SetBitmapPosition(wx.LEFT) # 可以设置 LEFT, RIGHT, TOP, BOTTOM
WxPython跨平台开发框架之图标选择界面的更多相关文章
- 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
在前面介绍了两篇关于我的基于MVC4+EasyUI技术的Web开发框架的随笔,本篇继续介绍其中界面部分的一些使用知识,包括控件的赋值.取值.清空,以及相关的使用. 我们知道,一般Web界面包括的界面控 ...
- 转--基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用
原文 http://www.cnblogs.com/wuhuacong/p/3317223.html 基于MVC4+EasyUI的Web开发框架形成之旅--界面控件的使用 在前面介绍了两篇关于我的基 ...
- JS组件系列——不容错过的两款Bootstrap Icon图标选择组件
前言:最近好多朋友在群里面聊到bootstrap icon图标的问题,比如最常见的菜单管理,每个菜单肯定需要一个对应的菜单图标,要是有一个可视化的图标选择组件就好了,最好是直接选择图标,就能得到对应的 ...
- [ionic开源项目教程] - 手把手教你使用移动跨平台开发框架Ionic开发一个新闻阅读APP
前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. 关注订阅号:TongeBlog ,查看移动端跨平台 ...
- android中选择控件与选择界面自然过度效果的实现--一种新的交互设计
转载请标明出处: http://blog.csdn.net/jianghejie123/article/details/40648931 在安卓中经常遇到须要选择一个东西的功能,比方选择日期.选择文件 ...
- 移动跨平台开发框架Ionic开发一个新闻阅读APP
移动跨平台开发框架Ionic开发一个新闻阅读APP 前言 这是一个系列文章,从环境搭建开始讲解,包括网络数据请求,将持续更新到项目完结.实战开发中遇到的各种问题的解决方案,也都将毫无保留的分享给大家. ...
- DSAPI 调用串口选择界面
在DSAPI中,可以通过简单的代码调用串口选择界面,当用户选择了其中一个串口时,将返回选择的串口名称(或序号). Dim 串口名称 As String = DSAPI.串口通讯.显示串口选择界面.选择 ...
- win10和linux引导问题(没有系统选择界面)
由于最近学习嵌入式和c模块化编程,需要使用Linux系统,但是编程之外,WIN10还是主力系统,决定装双系统. 往常一样,百度装双系统方法,网上千篇一律,大都一个套路. 首先,WIN10 下,新开一个 ...
- uniapp+nvue实现仿微信/得物相册插件:选择界面 +自定义相册+图片视频过滤
本篇文章基于uniapp 框架+ nvue,实现了uniapp仿微信/得物相册选择功能实例项目,该插件实例实现了以下功能: 1: 相册过滤 2: 图视频过滤 3: 界面UI定制化 4: 栅格列数定制化 ...
- Qt栅格布局、ScrollArea和用户选择界面
用户选择界面 就我们在实际开发的时候可能需要面对这样一个界面 做个demo试试看 其实我们可以分解一下这个界面 就是除了控制相关的内容,最主要的就是这个界面之上,有一个个动态的输入的控件,上面都是学生 ...
随机推荐
- 手把手教会你使用Markdown【从入门到精通一篇就够了】
目录 一.Markdown是什么 二.Markdown优点 三.Markdown的基本语法 3.1 标题 3.2 字体 3.3 换行 3.4 引用 3.5 链接 3.6 图片 3.7 列表 3.8 分 ...
- 基于Java+SpringBoot+Mysql实现的快递柜寄取快递系统功能实现三
一.前言介绍: 1.1 项目摘要 随着电子商务的迅猛发展和城市化进程的加快,快递业务量呈现出爆炸式增长的趋势.传统的快递寄取方式,如人工配送和定点领取,已经无法满足现代社会的快速.便捷需求.这些问题不 ...
- Java基础语法闪过——纯小白
Java语法突击 笔者因为学校奇葩选课原因,需要学习Java,考试所迫和大伙一起交流复习下基础的语法内容,大家都一把拿下考试 观前提醒:本文整理的有些仓促了,简单几分钟看看Java有什么内容还好,如果 ...
- 云开发实践:从 0 到 1 带你玩 AI
今天我们将深入分析云开发的 AI 能力.这次的讨论焦点不再是之前提到的云端IDE编写代码的能力,而是更为广泛和实际的内容--如何利用云平台提供的各种模块化能力,快速高效地开发.今天的主题依然围绕AI展 ...
- [昌哥IT课堂]|如何确定 MySQL 服务器是否为 LTS 版本(译)
根据支持 LTS(长期支持)发布的新发布模型,给定的 MySQL 服务器将分为以下两类: 要么是 LTS 版本. 要么是创新版本. 本博客文章将解释如何确定给定的 MySQL 服务器是否为 LTS 版 ...
- The Bento Box Adventure
题目来源:codeforces 2041A 题目名称:The Bento Box Adventure 题目链接:https://codeforces.com/contest/2041/problem/ ...
- .NET9 - Swagger平替Scalar详解(四)
书接上回,上一章介绍了Swagger代替品Scalar,在使用中遇到不少问题,今天单独分享一下之前Swagger中常用的功能如何在Scalar中使用. 下面我们将围绕文档版本说明.接口分类.接口描述. ...
- Graylog之安装
Graylog是一个开源的日志聚合.分析.审计.展现和预警工具.功能上和ELK类似,但又比ELK要简单,依靠着更加简洁,高效,部署使用简单的优势很快受到许多人的青睐 安装部署: 单机部署,最小化部署 ...
- springboot 实现通用责任链模式
1.概述 在我们平时的工作中,填写分布填写数据,比如填入商品的基本信息,所有人信息,明细信息,这种情况就可以使用责任链模式来处理. 2.代码实现 2.1商品对象 public class Produc ...
- Astro Zen Blog |一个优雅、极简、强大的博客
介绍 Astro Zen 博客项目 如果你想部署一个自己的静态博客,又不想到处折腾,并且是熟悉的前端技术栈,你可以尝试下:Astro Zen Blog! Astro Zen Blog 是一个使用 As ...