WxPython跨平台开发框架之图标选择界面

在使用 wxPython 开发跨平台桌面应用程序时,创建一个图标选择界面 通常用于让用户从图标资源库中选择图标,我们可以把图标分为自定义的图标资源和系统的图标资源两大类,最终我们把它们整合一起使用,在框架的界面中使用,包括工具栏、右键菜单、按钮、图片等所需的地方显示,实现图文并茂的友好界面展示。本篇随笔介绍这两种图标资源的管理和使用过程。

1、图标分类介绍

这里图标我们分为两类,一类是wxPython内置的图标资源,以wx.Art_开始。wx.ART_ 是 wxPython 提供的艺术资源(Art Resource)常量,用于在界面中快速访问通用的图标或位图资源。这些资源可以通过 wx.ArtProvider 获取,主要用于创建标准化的界面,例如工具栏、菜单和对话框中的图标。这类可以使用 wx.ArtProvider.GetBitmapwx.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_INFORMATIONwx.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_,可以显著提高界面的一致性和开发效率!

另外一类是我们自己自定义的图标资源,为了方便整合使用,我们往往把它作为嵌入资源的方式,放在一个文件里面,如下所示。

WxPython跨平台开发框架之图标选择界面

需要的时候,直接导入这个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 例子代码的说明即可。

我为了方便,参考修改编写了一个独立的工具类来方便生成所需的代码。

我可以再文件目录中选择所需的文件,然后右键复制文件地址,把它们路径复制出来。

WxPython跨平台开发框架之图标选择界面

WxPython跨平台开发框架之图标选择界面

2、图标的选择界面及使用

前面介绍了两种不同的图标资源库,我们应该再框架系统中能够顺利使用它们,以便为我们的工具栏、菜单、按钮等地方添加有趣而有意义的图标,比单纯的文本会好看很多。

如列表界面中的工具栏、按钮都采用了和内容一致的图标,比较美观一些。

WxPython跨平台开发框架之图标选择界面

有时候,我们右键菜单也可以根据图表库选择一致意义的图标。

表格显示的右键菜单

WxPython跨平台开发框架之图标选择界面

或者树形列表的右键菜单

WxPython跨平台开发框架之图标选择界面

因此我们在系统中统一展示和选择图标操作,如下所示,包括自定义图标,也包括内置图标。

WxPython跨平台开发框架之图标选择界面

WxPython跨平台开发框架之图标选择界面

自定义图标可以根据需要进行添加到内置资源的类即可,图标来源很多,网上也有很多,可以参考一下下面的这个网址获取一些: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跨平台开发框架之图标选择界面

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/5176.html

(0)
LomuLomu
上一篇 2025 年 1 月 1 日
下一篇 2025 年 1 月 1 日

相关推荐

  • 『玩转Streamlit』–集成定时任务

    学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。 本篇总结了我改造自己的数据采集的工具时的一些经验。 1. 概要 与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往是按照一定的时间间隔周期性地执行。 这样的程序对交互性要求不高,所以我之前都是用命令行…

    2025 年 1 月 12 日
    74300
  • SpringBoot高级-底层原理

    “`markdown 目录 1 SpringBoot自动化配置原理 01-SpringBoot2高级-starter依赖管理机制 02-SpringBoot2高级-自动化配置初体验 03-SpringBoot2高级-底层原理-@Configuration配置注解 04-SpringBoot2高级-底层原理-@Import注解使用1 05-SpringBoo…

    2024 年 12 月 27 日
    56200
  • Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

    目录 前言 集合类 ArrayList 1. 创建和初始化 ArrayList 2.添加元素 add 3.获取元素 get 4.删除元素 remove 5.检查元素 6.遍历 ArrayList LinkedList Stack 1. 创建Stack对象 2. 压入元素 (push) 3. 弹出元素 (pop) 4. 查看栈顶元素 (peek) 5. 检查栈…

    2025 年 1 月 1 日
    73900
  • Grok Super自己账号国内支付订阅教程

    Grok Super自己账号国内支付订阅教程,面向国内用户整理Grok Super充值、订阅和代充流程。

    未分类 2026 年 7 月 7 日
    8100
  • WxPython跨平台开发框架之列表数据的通用打印处理

    在WxPython跨平台开发框架中,我们大多数情况下,数据记录通过wx.Grid的数据表格进行展示,其中表格的数据记录的显示和相关处理,通过在基类窗体 BaseListFrame 进行统一的处理,因此对于常规的数据记录打印,我们也可以在其中集成相关的打印处理,本篇随笔介绍如何利用WxPython内置的打印数据组件实现列表数据的自定义打印处理,以及对记录进行分…

    2024 年 12 月 31 日
    64100

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信