首页 > 其他分享 >Tree结构UI优化显示

Tree结构UI优化显示

时间:2023-03-17 15:22:12浏览次数:33  
标签:list self Tree UI ImageList 位图 优化 image wx

整体UI面板绘制参照https://www.cnblogs.com/babashi9527/p/17146645.html

接着UI面板的设计;

实现树形结构菜单的方式有很多种,每一种优化UI显示的方式可能存在较大差异;

我们这里采用的是wx.lib.agw.customtreectrl 模块CustomTreeCtrl类;

而且在这里,root节点和子节点采用得到方法还不一样;

一、其中子节点可以字节使用AppendItem()方法

AppendItem() 方法的参数解析:

CustomTreeCtrl.AppendItem(self, parent, text='', image=-1, selImage=-1, data=None) -> CustomTreeItem
  • parentwx.TreeItemId 类型,表示树形结构中此项的父级项 ID。
  • textstring 或 unicode 类型,表示要添加的这个项的文本标签。
  • imageint 类型,表示此项在未选中状态下的图像索引号。如果没有图像,则传递 -1
  • selImageint 类型,表示此项在选中状态下的图像索引号。如果没有图像,则传递 -1
  • data: 任何类型的数据,表示与此项相关联的数据。

该方法返回一个 CustomTreeItem 对象,代表添加的树形节点。你可以对该节点进行操作,例如设置选中状态、展开或折叠等。同时,返回的 CustomTreeItem 对象还包含有关该节点的其他数据,例如父级 ID、子节点 ID 等。

例如我们这里在分值定义的时候使用AppendItem()方法引用位图:

    def _load_note_books(self):
        #定义tree分支
        
        root_node = self.AppendItem(self.root, "9527",image=1, selImage=1)
        
        root_node2 = self.AppendItem(self.root, "8656",image=2, selImage=2)
        
        self.ExpandAll()

 

二、根节点root采用的是self.SetItemImage(self.root, 0)方法,其中self.root是根节点,0是位图表索引为0的位图;

三、在设置引用之前必须先创建位图表:

        #************************
        
        # 创建一个 wx.ImageList 对象,指定图像大小(宽度和高度)为 24*30 像素
        self.image_list = wx.ImageList(24, 30)
        # 在 wx.ImageList 对象中添加位图对象
        root_bitmap = PicturepackageUI.medal_2_line.GetBitmap()
        self.image_list.Add(root_bitmap)
        
        bitmap_9527 = PicturepackageUI.customer_service_fill.GetBitmap()
        self.image_list.Add(bitmap_9527)
        
        bitmap_8656 = PicturepackageUI.mac_fill.GetBitmap()
        self.image_list.Add(bitmap_8656)
        # 将图像列表分配给树控件
        self.AssignImageList(self.image_list)
        
        #************************

这里有需要注意一下:

在 wxPython 中,位图的尺寸必须与用于创建 wx.ImageList 对象时指定的尺寸相同。如果位图的尺寸小于 wx.ImageList 对象指定的尺寸,那么位图将被缩放以适合 wx.ImageList 对象。但是,如果位图的尺寸大于 wx.ImageList 对象指定的尺寸,则位图将不会显示。

这是因为 wx.ImageList 对象只有在创建时才能指定位图的尺寸。如果尝试添加大于 wx.ImageList 对象指定的尺寸的位图,将引发错误或未定义的行为。通常情况下,应在创建 wx.ImageList 对象时使用与位图大小相同的尺寸,以确保可以正确地显示所有位图。

如果需要在 wx.ImageList 中使用不同大小的位图,则可以创建多个 wx.ImageList 对象,并根据需要使用它们。例如,可以使用一个 wx.ImageList 对象来处理 16x16 的位图,另一个对象处理 24x24 的位图。然后根据需要在树控件或列表控件中使用不同的 wx.ImageList 对象。

以下是使用多个 wx.ImageList 对象处理不同大小的位图的示例代码:

# 创建一个新的 wx.ImageList 对象以处理 16x16 的位图
self.image_list_16 = wx.ImageList(16, 16)

# 创建一个新的 wx.ImageList 对象以处理 24x24 的位图
self.image_list_24 = wx.ImageList(24, 24)

# 将索引为 0 的 16x16 位图添加到第一个 ImageList
bmp1 = wx.Bitmap("image1.png")
self.image_list_16.Add(bmp1)

# 将索引为 0 的 24x24 位图添加到第二个 ImageList
bmp2 = wx.Bitmap("image2.png")
self.image_list_24.Add(bmp2)

# 在树控件中使用第一个 ImageList 来显示 16x16 的位图
self.tree_ctrl.SetImageList(self.image_list_16)

# 在列表控件中使用第二个 ImageList 来显示 24x24 的位图
self.list_ctrl.SetImageList(self.image_list_24)

在上述代码中,我们首先创建了两个 wx.ImageList 对象,一个用于处理 16x16 的位图,另一个用于处理 24x24 的位图。然后,我们将位图添加到相应的 wx.ImageList 对象中,并将其用于树控件和列表控件中。注意,我们必须将不同大小的位图添加到不同的 wx.ImageList 对象中,并使用相应的 wx.ImageList 对象将它们显示在控件中。

 

标签:list,self,Tree,UI,ImageList,位图,优化,image,wx
From: https://www.cnblogs.com/babashi9527/p/17226865.html

相关文章

  • Splunk DB Connect 连接MySQL报错CLIENT_PLUGIN_AUTH is required
    01、问题描述使用SplunkDBConnect连接MySQL数据库读库时,报错CLIENT_PLUGIN_AUTHisrequired,如下图:02、原因分析根据报错信息,查阅相关资料,了解到报错原因:目标数据库......
  • ubuntu20.04 centos 7安装nginx 及nginx可视化工具 nginxWebUI
          nginxWebUI是一款图形化管理nginx配置的工具,可以使用网页来快速配置nginx的各项功能,包括http协议转发、tcp协议转发、反向代理、负载均衡、静态html服务器、ss......
  • C++中的HashTable性能优化
    C++中的HashTable性能优化-知乎https://zhuanlan.zhihu.com/p/614105687C++中的HashTable性能优化腾讯技术工程​编程话题下的优秀答主​关注 72......
  • 信息系统优化、解构、逆向的建议
    信息系统优化、解构、逆向是一种分析和改进信息系统的方法。下面我将分别介绍它们的基本思路和方法。1,信息系统优化信息系统优化是指通过对系统进行分析和改进,以提高其......
  • suitecrm
      SuiteCRM userbitnami 安装步骤注意:在华为云上开放对应的端口号suitecrm汉化包 汉化步骤......
  • Python pyyaml报错:TypeError load() missing 1 required positional argument ‘Loade
    直接开门见山,一个小报错。报错:ERROR-load()missing1requiredpositionalargument:'Loader'报错行:config=yaml.load(f)报错原因:......
  • arduino 蓝牙模块测试
    今天在chatgpt的高效查询下顺利地测试了arduino的蓝牙功能: 蓝牙模块(JDY-31):原材料ArduinoUNO开发板x1蓝牙模块JDY-31x1子母杜邦线若干马达/LED灯x1(本次用的......
  • arduino学习(1)
    买的Arduino板子终于到了,终于可以动手做实验了...  上图中有面包板,面包线,面包板电源,Arduino电路板,平多多买的,官网买会比较贵。  买的一块esp232板子......
  • 【项目实战】基于Pthon+PyQt5的GUI点名程序(附完整源码)
    1、项目说明基于python+PyQt5的GUI点名程序项目实战项目需要安装pycharm社区版或专业版都可,以及项目所需的所有模块项目需要安装pyqt5、pywin32及其他一些模块安装命......
  • 538. Convert BST to Greater Tree
    GivenaBinarySearchTree(BST),convertittoaGreaterTreesuchthateverykeyoftheoriginalBSTischangedtotheoriginalkeyplussumofallkeysgrea......